目录
-
1 查询语法
- select 列名列表 from 表名列表 where....
-
1.1 准备sql
- # 创建部门表
- CREATE TABLE dept(
- id INT PRIMARY KEY AUTO_INCREMENT,
- NAME VARCHAR(20)
- );
- INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部');
- CREATE TABLE dept(
- # 创建员工表
- 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-14',1);
- CREATE TABLE emp (
- # 创建部门表
-
1.2 笛卡尔积
- 有两个集合A,B .取这两个集合的所有组成情况。
- 要完成多表查询,需要消除无用的数据
-
1.3 多表查询的分类
- 1) 内连接查询:
- 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`;
- -- 查询所有员工信息和对应的部门信息
- 1.2) 显式内连接:
- 语法: select 字段列表 from 表名1 [inner] join 表名2 on 条件
- 例如:
- SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;
- SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;
- 1.3) 内连接查询:
- 1. 从哪些表中查询数据
- 2. 条件是什么
- 3. 查询哪些字段
- 1.1) 隐式内连接:使用where条件消除无用数据
- 2) 外链接查询:
- 1) 内连接查询: