DQL:数据查询语言,基本结构是由 SELECT 子句,FROM 子句,WHERE
单表查询
-- 格式 SELECT selection_list /*要查询的列名称*/ FROM table_list /*要查询的表名称*/ WHERE condition /*行条件*/ GROUP BY grouping_columns /*对结果分组*/ HAVING condition /*分组后的行条件*/ ORDER BY sorting_columns /*对结果分组*/ LIMIT offset_start, row_count /*结果限定*/
例子
-- 查询所有 SELECT * FROM t_man Mid Mname Mphone Mage Msex 8001 周杰伦 18812345543 30 男 8002 王力宏 18854321123 31 女 8003 吴尊 18898765123 32 男 8004 韩庚 18875315895 33 男 8005 张韶涵 15598726793 29 女 -- 查询指定列 SELECT t_man.Mname,t_man.Mage FROM t_man Mage Msex 周杰伦 30 王力宏 31 吴尊 32 韩庚 33 张韶涵 29 -- 按条件查询指定列 SELECT t_man.Mname,t_man.Mage FROM t_man WHERE t_man.Mage > 30 Mage Msex 王力宏 31 吴尊 32 韩庚 33 --------------查询条件---------------------------- 1.逻辑运算符 NOT : 取反 WHERE NOT t_man.Mage > 30 AND : 逻辑与 WHERE t_man.Mage > 30 AND t_man.Mname LIKE '__' OR : 逻辑或 WHERE t_man.Mage > 30 OR t_man.Mname LIKE '__' 2.比较运算符 =、<>、!=、>、>=、!>、<、<=、!< 3.LIKE,用于模糊查询 % : 后面可以跟零个或多个字符 _ : 匹配任意单个字符 [ ] : 查询一定范围内的单个字符,包括两端数据 WHERE t_man.Mname LIKE '[周李]%' [^] [!]: 表示不在一定范围内的单个字符,包括两端数据 4.BETWEEN between xx and xx WHERE t_man.Mage BETWEEN 30 AND 31 (等同于 t_man.Mage>=30 AND t_man.Mage<=31) not between xx and xx 5.is (not) null 在where子句中,需要用is (not) null 判断空值,不能使用=判断空值 WHERE t_man.Mage is not null 6.in 多条件 WHERE t_man.Mage IN (30,31) 7.ALL SOME ANY Some和any等效,all是大于最大者,any是小于最小者 WHERE t_man.Mage > ALL(SELECT t_man.Mage FROM t_man WHERE t_man.Mname LIKE '张%') 8.exists 和 no exists where exists (select * from t_man where t_man.Mid = 8001) 9.Group by 分组 SELECT AVG(t_man.Mage) FROM t_man GROUP BY t_man.Msex 10.Having 分组后条件 SELECT AVG(t_man.Mage) AS mk,t_man.Msex FROM t_man GROUP BY t_man.Msex HAVING mk > 30 11.ORDER BY 排序 ASC,DESC SELECT * FROM t_man ORDER BY t_man.Mid ASC 12.DISTINCT 去重 SELECT DISTINCT(t_man.Msex) FROM t_man 23.LIMIT 分页 SELECT * FROM t_man LIMIT 0,1 (显示第一行数据)
多表查询
-- 格式 SELECT selection_list /*要查询的列名称*/ FROM table_list /*要查询的表名称*/ JOIN table_list /*要查询的表名称*/ ON condition /*连接条件*/ WHERE condition /*行条件*/ GROUP BY grouping_columns /*对结果分组*/ HAVING condition /*分组后的行条件*/ ORDER BY sorting_columns /*对结果分组*/ LIMIT offset_start, row_count /*结果限定*/
例子
-- 交叉连接(Cross Join),没有链接条件的表查询会出现笛卡儿积 SELECT * FROM t_man,t_dept SELECT * FROM t_man JOIN t_dept -- 内连接(inner Join 或 Join),两表中都有才显示,即两表的交集 SELECT * FROM t_man JOIN t_dept ON t_man.Mid = t_dept.Mid -- 左外连接(Left outer Join),以左边表为主,左表全部显示,没有对应的就显示空,即左并集 SELECT * FROM t_man LEFT JOIN t_dept ON t_man.Mid = t_dept.Mid -- 右外连接(Right outer Join),与左外连接相反 SELECT * FROM t_man RIGHT JOIN t_dept ON t_man.Mid = t_dept.Mid -- 全连接(Full outer Join),默认不支持,但也其他方式可以实现。 SELECT * FROM t_man LEFT JOIN t_dept ON t_man.Mid = t_dept.Mid UNION SELECT * FROM t_man RIGHT JOIN t_dept ON t_man.Mid = t_dept.Mid -- UNION ALL 与 UNION 区别是允许重复
其它语言
DML:数据操作语言,主要有三种形式:
- 插入:INSERT
- 更新:UPDATE
- 删除:DELETE
DDL:数据定义语言,用来创建数据库中的各种对象(表、视图、索引、同义词、聚簇等)如:
- 创建:CREATE TABLE / VIEW / INDEX / SYN / CLUSTER
- 修改:ALTER TABLE
- 删除:DROP TABLE
- 清空:TRUNCATE TABLE
- …
DDL 操作是隐性提交的,不能 rollback
DCL:数据控制语言,用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。
- GRANT:授权。
- ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。回滚 —ROLLBACK 回滚命令使数据库状态回到上次最后提交的状态。其格式为:SQL > ROLLBACK
TCL:事务控制语言