(B站动⼒节点⽼杜MySQL教程)MySQL课堂笔记- ⽂章⽬录
⽂件来源/资料下载:
MySQL课堂笔记-
1、关于查询结果集的去重?
mysql> select distinct job from emp; // distinct关键字去除重复记录。
+-----------+
| job      |
+-----------+
| CLERK    |
| SALESMAN  |
| MANAGER  |
| ANALYST  |
| PRESIDENT |
+-----------+
mysql> select ename,distinct job from emp;
以上的sql语句是错误的。
记住:distinct只能出现在所有字段的最前⾯。
mysql> select distinct deptno,job from emp;
+--------+-----------+
| deptno | job      |
+--------+-----------+
|    20 | CLERK    |
|    30 | SALESMAN  |
|    20 | MANAGER  |
|    30 | MANAGER  |
|    10 | MANAGER  |
|    20 | ANALYST  |
|    10 | PRESIDENT |
|    30 | CLERK    |
|    10 | CLERK    |
+--------+-----------+tc编译器
案例:统计岗位的数量?
select count(distinct job) from emp;
+---------------------+
| count(distinct job) |
+---------------------+
|                  5 |dos命令大全及用法copy
+---------------------+
2、连接查询
2.1、什么是连接查询?
在实际开发中,⼤部分的情况下都不是从单表中查询数据,⼀般都是多张表联合查询取出最终的结果。
在实际开发中,⼀般⼀个业务都会对应多张表,⽐如:学⽣和班级,起码两张表。
stuno  stuname  classno  classname
c语言malloc在哪个头文件-----------------------------------------------------------------------------------
1  zs    1    北京⼤兴区亦庄经济技术开发区第⼆中学⾼三1班
2  ls    1    北京⼤兴区亦庄经济技术开发区第⼆中学⾼三1班
...
学⽣和班级信息存储到⼀张表中,结果就像上⾯⼀样,数据会存在⼤量的重复,导致数据的冗余。
2.2、连接查询的分类?
根据语法出现的年代来划分的话,包括:
SQL92(⼀些⽼的DBA可能还在使⽤这种语法。DBA:DataBase Administrator,数据库管理员)
SQL99(⽐较新的语法)
根据表的连接⽅式来划分,包括:
内连接:
等值连接
⾮等值连接
⾃连接
外连接:
左外连接(左连接)
右外连接(右连接)
全连接(这个不讲,很少⽤!)
2.3、在表的连接查询⽅⾯有⼀种现象被称为:笛卡尔积现象。(笛卡尔乘积现象)
案例:出每⼀个员⼯的部门名称,要求显⽰员⼯名和部门名。
EMP表
+--------+--------+
| ename  | deptno |
+--------+--------+
| SMITH  |    20 |
| ALLEN  |    30 |
| WARD  |    30 |
| JONES  |    20 |
| MARTIN |    30 |
| BLAKE  |    30 |
| CLARK  |    10 |
| SCOTT  |    20 |zookeeper是干什么的
| KING  |    10 |
| TURNER |    30 |
| ADAMS  |    20 |
| JAMES  |    30 |
| FORD  |    20 |
| MILLER |    10 |
+--------+--------+
amplitude单位DEPT表
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|    10 | ACCOUNTING | NEW YORK |
|    20 | RESEARCH  | DALLAS  |
|    30 | SALES      | CHICAGO  |
|    40 | OPERATIONS | BOSTON  |
+--------+------------+----------+
select ename,dname from emp,dept;
+--------+------------+
| ename  | dname      |
+--------+------------+
| SMITH  | ACCOUNTING |
| SMITH  | RESEARCH  |
| SMITH  | SALES      |
| SMITH  | OPERATIONS |
| ALLEN  | ACCOUNTING |
| ALLEN  | RESEARCH  |
| ALLEN  | SALES      |
| ALLEN  | OPERATIONS |
............
56 rows in set (0.00 sec)
笛卡尔积现象:当两张表进⾏连接查询的时候,没有任何条件进⾏限制,最终的查询结果条数是两张表记录条数的乘积。
关于表的别名:
ame,d.dname from emp e,dept d;
表的别名有什么好处?
第⼀:执⾏效率⾼。
第⼆:可读性好。
2.4、怎么避免笛卡尔积现象?当然是加条件进⾏过滤。
思考:避免了笛卡尔积现象,会减少记录的匹配次数吗?
不会,次数还是56次。只不过显⽰的是有效记录。
案例:出每⼀个员⼯的部门名称,要求显⽰员⼯名和部门名。
select
from
emp e , dept d
where
e.deptno = d.deptno; //SQL92,以后不⽤。
+--------+------------+
| ename  | dname      |
+--------+------------+
| CLARK  | ACCOUNTING |
| KING  | ACCOUNTING |
| MILLER | ACCOUNTING |
| SMITH  | RESEARCH  |
| JONES  | RESEARCH  |
| SCOTT  | RESEARCH  |
| ADAMS  | RESEARCH  |
| FORD  | RESEARCH  |
| ALLEN  | SALES      |
| WARD  | SALES      |
| MARTIN | SALES      |
| BLAKE  | SALES      |
| TURNER | SALES      |
| JAMES  | SALES      |
+--------+------------+
2.5、内连接之等值连接:最⼤特点是:条件是等量关系。
案例:查询每个员⼯的部门名称,要求显⽰员⼯名和部门名。
SQL92:(太⽼,不⽤了)
select
from
emp e, dept d
where
e.deptno = d.deptno;
SQL99:(常⽤的)
select
from
emp e
join
dept d
on
e.deptno = d.deptno;
// inner可以省略的,带着inner⽬的是可读性好⼀些。
select
from
emp e
inner join
dept d
on
e.deptno = d.deptno;
语法:
...
A
join
mysql菜鸟教程字符串型B
on
连接条件
where
...
SQL99语法结构更清晰⼀些:表的连接条件和后来的where条件分离了。
+--------+------------+
| ename  | dname      |
+--------+------------+
| CLARK  | ACCOUNTING |
| KING  | ACCOUNTING |
| MILLER | ACCOUNTING |
| SMITH  | RESEARCH  |
| JONES  | RESEARCH  |
| SCOTT  | RESEARCH  |
| ADAMS  | RESEARCH  |
| FORD  | RESEARCH  |
| ALLEN  | SALES      |
| WARD  | SALES      |
| MARTIN | SALES      |
| BLAKE  | SALES      |
| TURNER | SALES      |
| JAMES  | SALES      |
+--------+------------+
2.6、内连接之⾮等值连接:最⼤的特点是:连接条件中的关系是⾮等量关系。
案例:出每个员⼯的⼯资等级,要求显⽰员⼯名、⼯资、⼯资等级。
mysql> select ename,sal from emp; e

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。