@Great-Chinese
2017-04-04T11:24:52.000000Z
字数 5581
阅读 1640
SQL
语句大全
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
查询和更新指令构成了 SQL 的 DML 部分:
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据SQL 中最重要的 DDL 语句:
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
SELECT 列名称 FROM 表名称
SELECT LastName,FirstName FROM Persons
SELECT DISTINCT 列名称 FROM 表名称
SELECT DISTINCT Company FROM Orders
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
SELECT * FROM Persons WHERE City='Beijing'
= 等于
<
>
<> (!=)
<=
>=
between xxx and xxx
# 查询ID大于等于20,小于等于50的值,用于查询日期
SELECT * FROM epc_partgroup WHERE id >=20 AND id <= 50
SELECT * FROM epc_partgroup WHERE id BETWEEN 20 AND 50
like 搜索某种格式
# 数值
SELECT * FROM Persons WHERE Year>1965
# 文本值
SELECT * FROM Persons WHERE FirstName='Bush'
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter'
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
DELETE FROM 表名称 WHERE 列名称 = 值
DELETE FROM Person WHERE LastName = 'Wilson'
# 选取"Persons" 表中头两条记录
SELECT * FROM Persons limit 2
# 分页查询
SELECT * FROM Persons limit 0,10 # 查询第一页数据
SELECT * FROM Persons limit 10,10 # 从第10条数据开始查10条
# LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
SELECT * FROM Persons WHERE City LIKE 'N%' # 以N结尾的
SELECT * FROM Persons WHERE City LIKE '%lon%' # 包含
SELECT * FROM Persons WHERE City NOT LIKE '%lon%' # 不包含
# 选取"Persons" 表中名字的第一个字符之后是 "eorge" 的人
SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
# 选取"Persons" 表中的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er"
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'
# 选取"Persons" 表中居住的城市以 "A" 或 "L" 或 "N" 开头的人
SELECT * FROM Persons WHERE City LIKE '[ALN]%'
# 选取"Persons" 表中居住的城市不以 "A" 或 "L" 或 "N" 开头的人
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
# 选取表中姓氏为 Adams 和 Carter 的人
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
BETWEEN 操作符在 WHERE子句中使用,作用是选取介于两个值之间的数据范围
# 选取以字母顺序显示介于 "Adams"(包括)和"Carter"(不包括)之间的人
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
# 显示范围之外的人,使用 NOT 操作符
SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'
# 使用一个列名别名
SELECT LastName AS Family, FirstName AS Name FROM Persons
# 两个表分别是:"Persons"和"Product_Orders",指定别名 "p" 和 "po",然后列出 "John Adams" 的所有订单
SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Orders AS po WHERE po.persionid = p.id
and p.LastName='Adams'
AND p.FirstName='John'
# 如果表中有至少一个匹配,则返回行-join
SELECT authorities.username,users.password,users.enabled,authority FROM authorities JOIN users ON authorities.username=users.username;
# 即使右表中没有匹配,也从左表返回所有的行-LEFT JOIN
SELECT users.username,users.password,users.enabled,authority FROM users LEFT JOIN authorities ON authorities.username=users.username
# 即使左表中没有匹配,也从右表返回所有的行-RIGHT JOIN
SELECT users.username,users.password,users.enabled,authority FROM users right JOIN authorities ON authorities.username=users.username
FULL JOIN: 只要其中一个表中存在匹配,就返回行
# 取学生科目成绩平均分,然后分组按最高平均分倒序
SELECT fun_subject.jname,AVG(fun_score.score) savg FROM fun_subject
JOIN fun_score
ON fun_subject.id=fun_score.subid
GROUP BY fun_subject.jname
ORDER BY savg DESC;
# 统计学生总分最高分,并取总分平均分;
SELECT fun_student.sid,fun_student.sname,SUM(score)topsum,AVG(score) FROM fun_score
JOIN fun_student
ON fun_score.stuId=fun_student.sid
GROUP BY fun_student.sid,fun_student.sname
ORDER BY topsum DESC
LIMIT 0,20;
# 制作备份复件
SELECT * INTO Persons_backup FROM Persons
# 向另一个数据库中拷贝表
SELECT * INTO Persons IN 'Backup.mdb' FROM Persons
# 拷贝某些域,可以在 SELECT 语句后列出这些域
SELECT LastName,FirstName INTO Persons_backup FROM Persons
CREATE DATABASE my_db
# 创建表"Person" 包含以下5个列"Id_P"、"LastName"、"FirstName"、"Address" 以及 "City"
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
# 约束强制列不接受 NULL 值,约束强制字段始终包含值
NOT NULL
# 每个表可以有多个UNIQUE约束,但是每个表只能有一个 PRIMARY KEY 约束
UNIQUE
ALTER TABLE Persons DROP INDEX uc_PersonID # 撤销约束
# 每个表都应该有一个主键,并且每个表只能有一个主键
PRIMARY KEY
ALTER TABLE Persons DROP PRIMARY KEY # 撤销约束
# 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY
FOREIGN KEY
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders # 撤销约束
#
CHECK
ALTER TABLE Persons DROP CHECK chk_Person # 撤销约束
# 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
DEFAULT
ALTER TABLE Persons ALTER City DROP DEFAULT # 撤销约束
# 创建简单索引
CREATE INDEX index_name ON table_name (column_name)
# 创建唯一索引
CREATE UNIQUE INDEX index_name ON table_name (column_name)
# 创建"PersonIndex"索引,在 Person 表的 LastName 列
CREATE INDEX PersonIndex ON Person (LastName)
# 降序索引某个列中的值,在列名称之后添加保留字 DESC:
CREATE INDEX PersonIndex ON Person (LastName DESC)
# 创建索引不止一个列,在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PersonIndex ON Person (LastName, FirstName)
# DROP INDEX 命令删除表格中的索引
ALTER TABLE table_name DROP INDEX index_name
# DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除)
DROP TABLE Person
# DROP DATABASE 语句用于删除数据库
DROP DATABASE mysql
# TRUNCATE TABLE 语句仅仅删除表格中的数据
TRUNCATE TABLE Person
# 表 "Persons" 中添加一个名为 "Birthday" 的新列
ALTER TABLE Persons ADD Birthday date
# 改变"Persons" 表中 "Birthday" 列的数据类型
ALTER TABLE Persons ALTER COLUMN Birthday year
# 删除 "Person" 表中的 "Birthday" 列
ALTER TABLE Person DROP COLUMN Birthday
在新记录插入表中时生成一个唯一的数字
在SQL中,视图是基于SQL语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段.
SQL 创建视图
SQL 更新视图
SQL 撤销视图
# MySQL Date 函数
函数 描述
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间按的单独部分
DATE_ADD() 给日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT() 用不同的格式显示日期/时间