第二章 SQL基础
SQL分类
- DDL:数据定义语言。定义不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的create、drop、alter等
- DML:数据操纵语句。用于添加、删除、更新和查询数据库记录,并检查数据的完整性。常用的insert、delete、update和select等
- DCL:数据控制语句。用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等
SQL语句
show :查看数据库创建的所有的数据表
show create table
:查看全面的表定义ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]:修改表类型
[FIRST | AFTER col_name]为MySQL的扩展可选项,作用为修改字段在表中的位置
ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]:增加表字段
ALTER TABLE tablename DROP [COLUMN] col_name:删除表字段
ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition
[FIRST|AFTER col_name]:字段改名
ALTER TABLE tablename RENAME [TO] new_tablename:表改名
distinct 关键字:查询不重复的记录,如select distinct deptno from emp;
DESC 和 ASC 是排序顺序关键字,DESC 表示按照字段进行降序排列,ASC 则表示升序
排列,如select * from emp order by deptno,sal desc;
SELECT ……[LIMIT offset_start,row_count]:LIMIT关键字,让只显示一部分,offset_start 表示记录的起始偏移量,row_count 表示显示的行数,如select * from emp order by sal limit 1,3(从第二条开始显示三条)
聚合操作:
SELECT [field1,field2,……fieldn] fun_name
FROM tablename
[WHERE where_contition]
[GROUP BY field1,field2,……fieldn
[WITH ROLLUP]]
[HAVING where_contition]
- fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)
- GROUP BY 关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在 group by 后面。
- WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总。
- HAVING 关键字表示对分类后的结果再进行条件的过滤。
having和where的区别
区别在于 having 是对聚合后的结果进行条件的过滤,而 where 是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用 where 先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用 having 进行再过滤。
例子:
select deptno,count(1) from emp group by deptno with rollup:既要统计各部门人数,又要统计总人数
select deptno,count(1) from emp group by deptno having count(1)>1:统计人数大于 1 人的部门
count()函数:
关于mysql中的count()函数_数据库_wendychiang1991的博客-CSDN博客
表连接:
作用:当需要同时显示多个表中的字段
分类:内连接和外连接,它们之间的最主要区别是內连接仅选出两张表中
互相匹配的记录,而外连接会选出其他不匹配的记录。
外连接分类:
- 左连接:包含所有的左边表中的记录和右表符合条件的记录
- 右连接:包含所有的右边表中的记录和左表符合条件的记录
图解各种连接:
图解MySQL 内连接、外连接、左连接、右连接、全连接…太多了_数据库_plg17的专栏-CSDN博客
Mysql-- 内连接、左连接、右连接以及全连接查询_数据库_zjt980452483的博客-CSDN博客
子查询:
作用:当我们查询的时候,需要的条件是另外一个 select 语句的结果
关键字:in、not in、=、!=、exists、not exists 等
如:select * from emp where deptno in(select deptno from dept)
从 emp 表中查询出所有部门在 dept 表中的所有记录
注意:子查询和表连接之间的转换主要应用在两个方面:
- MySQL 4.1 以前的版本不支持子查询,需要用表连接来实现子查询的功能
- 表连接在很多情况下用于优化子查询
记录联合:
作用:将两个表的数据按照一定的查询条件查询出来后,将结果合并
到一起显示出来
关键字:union 和 union all
区别:UNION ALL 是把结果集直接合并在一起,而 UNION 是将
UNION ALL 后的结果进行一次 DISTINCT,去除重复记录后的结果
例子:
不去重: select deptno from emp union all select deptno from dept;
去重:select deptno from emp union select deptno from dept;