SQL基本使用语句整理
2017-05-09 13:57
351 查看
创建表 语法 CREATE TABLE <表名>(<列名> <数据类型>[列级完整性约束条件] [,<列名> <数据类型>[列级完整性约束条件]]…); 列级完整性约束条件有NULL[可为空]、NOT NULL[不为空]、UNIQUE[唯一],可以组合使用,但是不能重复和对立关系同时存在。 示例 -- 创建用户表 CREATE TABLE User ( Id INT NOT NULL UNIQUE PRIMARY KEY, Name VARCHAR(50) NOT NULL, Age INT NULL, Gender VARCHAR(8) NULL ); 删除表 语法 DROP TABLE <表名>; 示例 -- 删除用户表 DROP TABLE User; 清空表 语法 TRUNCATE TABLE <表名>; 示例 -- 删除用户表 TRUNCATE TABLE User; 修改表 语法 -- 添加列 ALTER TABLE <表名> [ADD <新列名> <数据类型>[列级完整性约束条件]] -- 删除列 ALTER TABLE <表名> [DROP COLUMN <列名>] -- 修改列 ALTER TABLE <表名> [MODIFY COLUMN <列名> <数据类型> [列级完整性约束条件]] 示例 -- 添加用户表`Phone`列 ALTER TABLE User ADD Phone VARCHAR(20) NULL; -- 删除用户表`Phone`列 ALTER TABLE User DROP COLUMN Phone; -- 修改用户表`Phone`列 ALTER TABLE User MODIFY Phone VARCHAR(20) NULL; SQL查询语句 语法 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]… FROM <表名或视图名>[,<表名或视图名>]… [WHERE <条件表达式>] [GROUP BY <列名> [HAVING <条件表达式>]] [ORDER BY <列名> [ASC|DESC]…] SQL查询语句的顺序:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。SELECT、FROM是必须的,HAVING子句只能与GROUP BY搭配使用。 示例 SELECT * FROM User WHERE Id>10 GROUP BY Age HAVING AVG(Age) > 20 ORDER BY Id DESC SQL插入语句 语法 -- 插入不存在的数据 INSERT INTO <表名> [(字段名[,字段名]…)] VALUES (常量[,常量]…); -- 将查询的数据插入到数据表中 INSERT INTO <表名> [(字段名[,字段名]…)] SELECT 查询语句; 示例 -- 插入不存在的数据 INSERT INTO User (Name,Age,Gender) VALUES ('lilei',30,'male'); -- 将查询的数据插入到数据表中 INSERT INTO User (Name,Age,Gender) SELECT Name,Age,Gender FROM Student_T WHERE Id >10; SQL更新语句 语法 UPDATE <表名> SET 列名=值表达式[,列名=值表达式…] [WHERE 条件表达式] 示例 -- 将Id在(10,100)的Age加1 UPDATE User SET Age= Age+1 WHERE Id>10 AND Id<100 SQL删除语句 语法 DELETE FROM <表名> [WHERE 条件表达式] 示例 -- 删除Id小于10的数据记录 DELETE FROM User WHERE Id<10; 创建索引 语法 CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>]]…); UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录 CLUSTER:表明建立的索引是聚集索引 次序:可选ASC(升序)或DESC(降序),默认ASC 示例 -- 建立用户表索引:单一字段Id索引倒序 CREATE UNIQUE INDEX INDEX_SId ON User (Id DESC); -- 建立用户表索引:多个字段Id、Name索引倒序 CREATE UNIQUE INDEX INDEX_SId_SName ON User (Id DESC,Name DESC); 删除索引 语法 DROP INDEX <索引名>; 示例 -- 删除用户表索引 INDEX_SId DROP INDEX INDEX_SId; 创建视图 语法 CREATE VIEW <视图名> AS SELECT 查询子句 [WITH CHECK OPTION] 查询子句:子查询可以是任何SELECT语句,但是常不允许含有ORDER BY子句和DISTINCT短语; WITH CHECK OPTION:表示对UPDATE、INSERT、DELETE操作时要保证更新。 示例 CREATE VIEW VIEW_User_Male AS SELECT * FROM User WHERE Gender = 'male' WITH CHECK OPTION 删除视图 语法 DROP VIEW <视图名>; 示例 DROP VIEW VIEW_User_Male; SQL的访问控制 访问控制是控制用户的数据存储权限,由DBA来决定。 SQL标准语句包括SELECT、INSERT、UPDATE和DELETE 语法 -- 1.授权 GRANT <权限>[,<权限>]… [ON <对象类型> <对象名>] TO <用户>[,<用户>]… [WITH GRANT OPTION] -- 2.收回授权 REVOKE <权限>[,<权限>]… [ON <对象类型> <对象名>] FROM <用户>[,<用户>]… WITH GRANT OPTION:若指定此子句,表示该用户可以将权限赋给其他用户 示例 -- 授权 GRANT SELECT,INSERT,UPDATE ON TABLE TO USER_Admin WITH GRANT OPTION -- 收回授权 REVOKE SELECT,INSERT,UPDATE ON TABLE FROM USER_Admin 别名/更名 语法 SELECT 字段名1 [AS] 别名 [,字段名1 AS 别名]… FROM <表名> AS可以省略 当别名中含有非字母和下划线时或者是关键字时,需要加上单/双引号 示例 SELECT Id AS '学号',Name '姓名',Class ClassName FROM Students; 子查询(嵌套查询) 子查询也称嵌套查询,是指一个SELECT查询语句可以嵌入另一个SELECT查询语句之中。SQL中允许多级嵌套,子查询在实际使用中非常多。 连接查询:涉及两个及以上的表查询为连接查询。 --查询二班学生成绩 SELECT * FROM Scores WHERE SId IN(SELECT Id FROM Students WHERE Class='二班') 聚合函数查询 聚合函数:是一个值的集合为输入,返回单个值的函数。 SQL预定义了5个聚集函数:AVG(平均值)、MIN(最小值)、MAX(最大值)、SUM(求和)、COUNT(计数)。 具体的数据库还会预定义一些其他常用的函数,比如字符串相聚合函数、时间聚合函数……。 SELECT AVG(Age),MAX(Age),MIN(Age),SUM(Age),COUNT(Id) FROM Students; 分组查询 使用GROUP BY子句可进行分组查询 注意:分组查询的时候要在GROUP BY子句后面跟上所有查询字段的列表 --根据班级分组查询各班平均年龄、最大 年龄、最小年龄、年龄总和、班级人数 SELECT Class,AVG(Age),MAX(Age),MIN(Age),SUM(Age),COUNT(Id) FROM Students GROUP BY Class; HAVING子句 如果需要在分组前的数据进行限制,可以使用HAVING子句 HAVING子句只能与GROUP BY搭配使用 --根据班级分组查询各班平均年龄并且班级人数大于3人 SELECT Class,AVG(Age) FROM Students GROUP BY Class HAVING COUNT(Id)>3; HAVING子句和WHERE的区别 WHERE语句在GROUP BY语句之前,SQL会在分组之前计算WHERE语句; HAVING语句在GROUP BY语句之后,SQL会在分组之后计算HAVING语句。 模糊查询 语法 SELECT 字段列表 FROM 表名 WHERE 字段 LIKE '<通配符>' 模糊查询是通过关键字LIKE和通配符实现的 _:任何单个字符(一个'_'只匹配一个字符,多个字符就使用多个_) %:包含零个或更多字符的任意字符串(匹配任意内容) []:指定范围的字符(只匹配[]内的字符) [^]:不在指定范围的字符(只匹配除[]内的字符) SQL中通配符可以混合使用 去重复(DISTINCT) DISTINCT:用于返回唯一不同的值,主要是用于某一字段。 语法 SELECT DISTINCT <列名>|* FROM <表名> 示例 --查询所有班级名称 SELECT DISTINCT Class FROM Students 组合查询 SQL组合查询可以使用以下关键字进行操作: UNION(并集):比较两个查询的结果,返回两个集合所有非重复行。 INTERSECT(交集):比较两个查询的结果,返回由左右双侧输入查询输出的非重复行。 EXCEPT(差集):比较两个查询的结果,返回左侧查询集合中不包含左右集合交集部分的非重复行。 注意: 使用 EXCEPT 或 INTERSECT 的两个查询的结果集组合起来的基本规则: 所有查询中的列数和列的顺序必须相同;数据类型必须兼容。 语法 [SQL查询表达式1] UNION | INTERSECT | EXCEPT [SQL查询表达式2]; 连接查询 常用的连接查询有如下几种: 内连接(INNER JOIN):返回连接的对象都满足条件的行。 左连接(LEFT JOIN):返回左边数据所有数据,即使右边没有数据 (没有对应数据显示为NULL)。 右连接(RIGHT JOIN):返回右边数据所有数据,即使左边没有数据 (没有对应数据显示为NULL)。 全连接(FULL JOIN):返回左右交叉数据。 提示:INNER JOIN 与 JOIN 是相同的。 语法 SELECT 字段列表 FROM <数据表|视图> INNER JOIN <数据表|视图> ON 条件表达式; 虚拟表 SQL虚拟表是通过SELECT查询语句返回的一个结果集。 当虚拟表构建出来后,可以直接当作实际数据表一样查询操作,在实际使用中会经常使用到。 语法 SELECT 字段列表1 FROM (SELECT 字段列表2 FROM <表名> [WHERE子句]) <虚拟表名称> [WHERE子句] 示例 SELECT * FROM ( SELECT S.Id,S.Name CName,S.Grades,S.IsPassed,S.SId,ST.Name,ST.Class FROM Students ST LEFT JOIN (SELECT Scores.*,C.Name FROM Scores LEFT JOIN Courses C ON Scores.CId=C.Id) S ON ST.Id=S.SId ) T 示例中的SELECT Scores.*,C.Name FROMScores LEFT JOIN Courses C ON Scores.CId=C.Id中 C 和最后面 T 就是虚拟表名称。
相关文章推荐
- Oracle PL/SQL:IF语句的基本使用
- 使用SQL语句导出MYSQL数据库及基本表的创建SQL语句
- sqlite基本sql语句使用
- SQL基本语句及其使用方法之【CREATE/SELECT/ALTER/DROP/GROUP BY】
- 【Cocos2d-x 020】 sqlite基本sql语句使用
- 动态sql语句基本语法(字段名,表名,数据库名之类作为变量时,必须用动态SQL如ALTER TABLE中使用程序传递的参数)
- [SQL]常用的MySQL基本语句(整理中)
- Oracle数据库案例整理-执行Oracle脚本失败或异常-使用SQL语句插入中文后数据库中显示乱码
- 导入数据经常使用的SQL语句整理整理
- 动态sql语句基本语法(字段名,表名,数据库名之类作为变量时,必须用动态SQL如ALTER TABLE中使用程序传递的参数)
- 个人整理的sql基本语句(不全)
- [SQL]常用的MySQL基本语句(整理中)
- SQL语句基本使用总结
- 初学者Oracle数据库:sql语句的基本使用与示例
- ACCESS中使用SQL语句应注意的地方、与sql server的区别及几点技巧(整理中)
- 动态sql语句基本语法(字段名,表名,数据库名之类作为变量时,必须用动态SQL如ALTER TABLE中使用程序传递的参数)
- MySql WorkBench基本使用以及基本sql语句
- SQL基本语句整理(转)
- FMDB使用和基本SQL语句
- 使用二进制格式包安装Mysql以及基本SQL语句的应用。