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);