请选择 进入手机版 | 继续访问电脑版

12360技术网 - 专业IT技术发表平台

 立即注册  找回密码
查看: 5775|回复: 8

MySQL知识点(三)

[复制链接]

13

主题

22

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
发表于 2020-1-27 13:05:06 | 显示全部楼层 |阅读模式
多表查询

[code]* 查询语法 :        select                 列名列表        from                表名列表        where                .....* 准备sql        # 创建部门表                CREATE TABLE dept(                        id INT PRIMARY KEY AUTO_INCREMENT,                        NAME VARCHAR(20)                );                                INSERT INTO dept(NAME) VALUES('开发部'),('市场部'),('财务部');                        # 创建员工表                CREATE TABLE emp(                        id INT PRIMARY KEY AUTO_INCREMENT,                        NAME VARCHAR(10),                        gender CHAR(1),                        salary DOUBLE,                        join_date DATE, -- 入职日期                        dept_id INT,                        FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外键,关联部门表(部门表的主键)                );                                INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2013-02-24',1);                INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪八戒','男',3600,'2010-12-02',2);                INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2);                INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3);                INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-24',1);* 笛卡尔积 :        * 有两个集合A,B,取这两个集合的所有组成情况        * 要完成多表查询,所有消除无用的数据* 多表查询分类 :        1. 内连接查询 :                1. 隐式内连接 : 使用where条件消除                        * 例子 :                        -- 查询所有员工信息和对应的部门信息                        SELECT * FROM emp,dept WHERE emp.dept_id = dept.id;                                                -- 查询员工表的名称,性别,部门表的名称                                                SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.dept_id = dept.id;                                                SELECT                                 t1.`name`, -- 员工表的姓名                                t1.`gender`, -- 员工表的性别                                t2.`name` -- 部门表的名称                        FROM                                emp t1,                                dept t2                        WHERE                                t1.`dept_id` = t2.`id`;                2. 显示内连接 :                        * 语法 : select 字段列表 from 表名1 [inner] join 表名2 on 条件                        * 例如:                                * SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;                                                                省略inner                                * SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;                        3. 内连接查询 :                        1. 从那些表中查询数据                        2. 查询条件是什么                        3. 查询那些字段        2. 外连接查询 :                1. 左外连接 :                        * 语法 : select 字段列表 from 表1 left [outer] join 表2 on 条件;                        * 查询的是左表所有数据以及其交集部分                2. 右外连接 :                        * 语法 : select 字段列表 from 表1 right [outer] join 表2 on 条件;                        * 查询的是右表所有数据以及其交集部分        3. 子查询 :                * 概念 : 查询中嵌套查询, 称嵌套查询为子查询                -- 查询工资最高的员工信息                -- 1.查询最高的工资是多少 9000                SELECT MAX(salary) FROM emp;                                -- 2.查询员工信息,并且工资等于9000的                SELECT * FROM emp WHERE emp.`salary` = 9000;                                                -- 一条sql就完成这个操作 子查询                SELECT * FROM emp WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);                * 子查询不同情况                        1. 子查询结果是单行单列的 :                                 * 子查询可以作为条件使用这些运算符判断.  运算符 : > < >=  '2011-11-11') t2                                WHERE t1.id = t2.dept_id;                                -- 普通内连接                                SELECT * FROM emp t1, dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` >'2011-11-11';        * 多表查询练习                -- 需求:                        -- 1.查询所有员工的信息. 查询员工编号,员工姓名,工资,职位名称,职位描述                        /*                                分析:                                        1.员工编号,员工姓名,工资,需要查询emp表                                             职位名称,职位描述 需要查询job表                                        2.查询的条件 emp.job_id = job.id                        */                        SELECT                                 t1.id, -- 员工编号                                t1.ename, -- 员工姓名                                t1.salary, -- 工资                                t2.jname, -- 职位名称                                t2.description -- 职位描述                        FROM                                 emp t1,                                job t2                        WHERE                                t1.job_id = t2.`id`;                                                                        -- 2.查询员工编号,员工姓名,工资,职位名称,职位描述,部门名称,部门位置                        /*                                分析:                                        1.员工编号,员工姓名,工资,需要查询emp表                                            职位名称,职位描述 需要查询job表                                             部门名称,部门位置 需要查询demp表                                        2.查询的条件 emp.job_id = job.id and emp.dept_id = dept.id                        */                        SELECT                                t1.`id`, -- 员工编号                                t1.`ename`, -- 员工姓名                                t1.`salary`, -- 工资                                t2.`jname`, -- 职位名称                                t2.`description`, -- 职位描述                                t3.`dname`, -- 部门名称                                t3.`loc` -- 部门位置                        FROM                                emp t1,                                job t2,                                dept t3                                                        WHERE                                t1.`job_id` = t2.`id` AND t1.`dept_id` = t3.`id`;                                                                        -- 3.查询员工姓名,工资,工资等级                        /*                                分析 :                                         1.员工姓名,工资 emp表                                          工资等级  salarygrade表                                        2.查询的条件件                                                 第一种方式                                                emp.salary >= salarygrade.losalary and emp.salary




上一篇:MySQL(InnoDB剖析):03---MySQL的连接与通信方式(进程间通信(管道、套接字
回复

使用道具 举报

0

主题

25

帖子

535

积分

高级会员

Rank: 4

积分
535
发表于 2020-1-28 18:15:59 | 显示全部楼层
楼主,我太崇拜你了![www.12360.co]
社区不能没有像楼主这样的人才啊!
回复

使用道具 举报

0

主题

26

帖子

556

积分

高级会员

Rank: 4

积分
556
发表于 2020-2-8 01:30:30 | 显示全部楼层
楼主,大恩不言谢了![www.12360.co]
回复

使用道具 举报

0

主题

19

帖子

409

积分

中级会员

Rank: 3Rank: 3

积分
409
发表于 2020-2-13 05:51:34 | 显示全部楼层
其实我一直觉得楼主的品味不错!呵呵![www.12360.co]
回复

使用道具 举报

0

主题

19

帖子

409

积分

中级会员

Rank: 3Rank: 3

积分
409
发表于 2020-2-19 08:56:15 | 显示全部楼层
这东西我收了!谢谢楼主![www.12360.co]
回复

使用道具 举报

0

主题

21

帖子

451

积分

中级会员

Rank: 3Rank: 3

积分
451
发表于 2020-2-21 18:03:10 | 显示全部楼层
楼主太厉害了!楼主,I*老*虎*U![www.12360.co]
回复

使用道具 举报

22

主题

31

帖子

265

积分

中级会员

Rank: 3Rank: 3

积分
265
发表于 5 天前 | 显示全部楼层
楼主发贴辛苦了,谢谢楼主分享![www.12360.co]
回复

使用道具 举报

0

主题

25

帖子

535

积分

高级会员

Rank: 4

积分
535
发表于 4 天前 | 显示全部楼层
既然你诚信诚意的推荐了,那我就勉为其难的看看吧![www.12360.co]
回复

使用道具 举报

0

主题

17

帖子

367

积分

中级会员

Rank: 3Rank: 3

积分
367
发表于 昨天 04:02 | 显示全部楼层
感谢楼主的无私分享![www.12360.co]
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

12360技术网

GMT+8, 2020-2-29 15:13 , Processed in 0.091327 second(s), 24 queries .

本网站内容收集于互联网,Www.12360.Co不承担任何由于内容的合法性及健康性所引起的争议和法律责任。 欢迎大家对网站内容侵犯版权等不合法和不健康行为进行监督和举报。

© 2019-2020 Www.12360.Co

快速回复 返回顶部 返回列表