1.连接操作

SELECT column_name(s)
FROM table1
INNER JOIN table2//也可 left join 、right join 、full join
ON table1.column_name=table2.column_name;

2.通配符[]

SELECT *
FROM student
where student.姓名 like '[^by]%';//[]匹配字符集合中的任何一个字符,[^]匹配不在括号中的任意单个字符

3.SELECT INTO
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。

SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id;

4.INSERT INTO SELECT
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。

INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps
WHERE id=1;

5.约束(UNIQUE为例)
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。PRIMARY KEY、check、外键的使用与此相似

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)

当表已被创建时,如需在 “P_Id” 列创建 UNIQUE 约束,请使用下面的 SQL:

ALTER TABLE Persons
ADD UNIQUE (P_Id)

ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

撤销 UNIQUE 约束

ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

6.DEFAULT 约束

CREATE TABLE Persons
(
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) DEFAULT 'Sandnes'
)

ALTER TABLE 时的 SQL DEFAULT 约束

//1
alter table xinxi
add  default 'nihao' for course;
//2
ALTER TABLE Persons
ADD CONSTRAINT ab_c DEFAULT 'SANDNES' for City

撤销 DEFAULT 约束

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

7.CREATE INDEX 语句
允许使用重复的值

CREATE INDEX index_name
ON table_name (column_name,jk)

在表上创建一个唯一的索引。

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

8.撤销索引、撤销表以及撤销数据库

DROP INDEX table_name.index_name
DROP TABLE table_name
DROP DATABASE database_name
TRUNCATE TABLE table_name//仅仅需要删除表内的数据,但并不删除表本身

9.AUTO INCREMENT 语句
Auto-increment 会在新记录插入表中时生成一个唯一的数字。

CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,//identity 的开始值是 1,每条新记录递增 1
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
//要在 "Persons" 表中插入新记录,我们不必为 "ID" 列规定值(会自动添加一个唯一的值)

10.视图
创建

CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)

查寻

SELECT * FROM [Products Above Average Price]

删除

DROP VIEW view_name

11.sql函数
SQL Aggregate 函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
有用的 Aggregate 函数:
AVG() - 返回平均值
COUNT() - 返回行数

SELECT COUNT(count) AS nums FROM access_log
WHERE site_id=3;

FIRST() - 返回第一个记录的值

SELECT TOP 1 name FROM Websites

LAST() - 返回最后一个记录的值
MAX() - 返回最大值
MIN() - 返回最小值
SUM() - 返回总和

12.SQL Scalar 函数
SQL Scalar 函数基于输入值,返回一个单一的值。
有用的 Scalar 函数:
UCASE() - 将某个字段转换为大写

SELECT UPPER(column_name) FROM table_name;

LCASE() - 将某个字段转换为小写

SELECT LOWER(column_name) FROM table_name;

MID() - 从某个文本字段提取字符,MySql 中使用

SELECT SUBSTRING(name,0,2) FROM s;

SubString(字段,1,end) - 从某个文本字段提取字符
LEN() - 返回某个文本字段的长度

SELECT LEN(column_name) FROM table_name;

ROUND() - 对某个数值字段进行指定小数位数的四舍五入

SELECT ROUND(column_name,decimals) FROM table_name;

NOW() - 返回当前的系统日期和时间
FORMAT() - 格式化某个字段的显示方式

SELECT FORMAT(column_name,format) FROM table_name;

13.group by

SELECT  count(student.姓名) fROM student
group BY  课程;

14.having
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Websites
ON access_log.site_id=Websites.id)
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;

15. EXISTS 运算符

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);

根据别的表(视图)创建新的表

数据和结构

select * into yyv_monthccdetail from yyv_MonthTcDetail;

仅结构

select * into yyv_monthccdetail from yyv_MonthTcDetail where 1=2;

异常信息显示