@Great-Chinese
2017-04-04T03:24:52.000000Z
字数 5581
阅读 1688
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 PersonsSELECT DISTINCT 列名称 FROM 表名称SELECT DISTINCT Company FROM OrdersSELECT 列名称 FROM 表名称 WHERE 列 运算符 值SELECT * FROM Persons WHERE City='Beijing'= 等于<><> (!=)<=>=between xxx and xxx# 查询ID大于等于20,小于等于50的值,用于查询日期SELECT * FROM epc_partgroup WHERE id >=20 AND id <= 50SELECT * FROM epc_partgroup WHERE id BETWEEN 20 AND 50like 搜索某种格式# 数值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, OrderNumberSELECT Company, OrderNumber FROM Orders ORDER BY Company DESCSELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASCINSERT 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.idand p.LastName='Adams'AND p.FirstName='John'
# 如果表中有至少一个匹配,则返回行-joinSELECT authorities.username,users.password,users.enabled,authority FROM authorities JOIN users ON authorities.username=users.username;# 即使右表中没有匹配,也从左表返回所有的行-LEFT JOINSELECT users.username,users.password,users.enabled,authority FROM users LEFT JOIN authorities ON authorities.username=users.username# 即使左表中没有匹配,也从右表返回所有的行-RIGHT JOINSELECT users.username,users.password,users.enabled,authority FROM users right JOIN authorities ON authorities.username=users.usernameFULL JOIN: 只要其中一个表中存在匹配,就返回行
# 取学生科目成绩平均分,然后分组按最高平均分倒序SELECT fun_subject.jname,AVG(fun_score.score) savg FROM fun_subjectJOIN fun_scoreON fun_subject.id=fun_score.subidGROUP BY fun_subject.jnameORDER BY savg DESC;# 统计学生总分最高分,并取总分平均分;SELECT fun_student.sid,fun_student.sname,SUM(score)topsum,AVG(score) FROM fun_scoreJOIN fun_studentON fun_score.stuId=fun_student.sidGROUP BY fun_student.sid,fun_student.snameORDER BY topsum DESCLIMIT 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 约束UNIQUEALTER TABLE Persons DROP INDEX uc_PersonID # 撤销约束# 每个表都应该有一个主键,并且每个表只能有一个主键PRIMARY KEYALTER TABLE Persons DROP PRIMARY KEY # 撤销约束# 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEYFOREIGN KEYALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders # 撤销约束#CHECKALTER TABLE Persons DROP CHECK chk_Person # 撤销约束# 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。DEFAULTALTER 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() 用不同的格式显示日期/时间