From b59cd8d29f6bcb1d75bb71f65528216381e6304e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E5=BF=97=E9=B9=8F?= <326806914@qq.com> Date: Fri, 10 Mar 2023 22:26:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E2=80=9C=E4=BD=9C=E4=B8=9A=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\244\247\344\275\234\344\270\232.md" | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 "10 \346\234\261\345\277\227\351\271\217/\345\244\247\344\275\234\344\270\232.md" diff --git "a/10 \346\234\261\345\277\227\351\271\217/\345\244\247\344\275\234\344\270\232.md" "b/10 \346\234\261\345\277\227\351\271\217/\345\244\247\344\275\234\344\270\232.md" new file mode 100644 index 0000000..2a3c855 --- /dev/null +++ "b/10 \346\234\261\345\277\227\351\271\217/\345\244\247\344\275\234\344\270\232.md" @@ -0,0 +1,103 @@ +```sql +create database xiaoshou charset utf8; +use xiaoshuo; +CREATE TABLE author ( + author_id INT PRIMARY KEY, + author_name VARCHAR(20) UNIQUE KEY not NULL, + credits INT, + vip_id VARCHAR(20) NOT NULL, + FOREIGN KEY (vip_id) REFERENCES vip(vip_id) +); +INSERT INTO author VALUES +(1001,'朱逸群',600,'VIP01'), +(1002,'范建',8510,'VIP04'), +(1003,'史珍香',981,'VIP02'), +(1004,'范统',2364,'VIP02'), +(1005,'杜子腾',257,'VIP01'), +(1006,'刘产',678,'VIP02'), +(1007,'杜琦燕',438,'VIP03'); +CREATE TABLE vip ( + vip_id VARCHAR(20) PRIMARY KEY, + vip_name VARCHAR(20) UNIQUE KEY not NULL +); +INSERT INTO vip VALUES +('VIP01','青铜作家'), +('VIP02','白银作家'), +('VIP03','黄金作家'), +('VIP04','钻石作家'); +CREATE TABLE story ( + story_id INT PRIMARY KEY auto_increment, + author_id INT, + type_id VARCHAR(20), + story_name VARCHAR(50), + views_number INT, + FOREIGN KEY (author_id) REFERENCES author(author_id), + FOREIGN KEY (type_id) REFERENCES type(type_id) +); +INSERT INTO story VALUES +(1,1002,'L03','母猪产后与护理师的二三事',6541), +(2,1005,'L04','拖拉机大战蜘蛛侠',563), +(3,1003,'L01','这只小龙虾不正经',8754), +(4,1006,'L04','一个爹爹三个娃',36354), +(5,1006,'L01','皇上滚开本宫只劫财',3674), +(6,1005,'L05','给长城贴瓷砖的小太监',6541), +(7,1003,'L03','不科学御兽',1257), +(8,1005,'L01','镜面管理局',3216), +(9,1004,'L02','关于我成为灭魂师之后',1147), +(10,1004,'L05','公子别秀',2078); +CREATE TABLE type ( + type_id VARCHAR(20) PRIMARY KEY, + type_name VARCHAR(20) UNIQUE KEY not NULL +); +INSERT INTO type VALUES +('L01','玄幻'), +('L02','奇幻'), +('L03','武侠'), +('L04','仙侠'), +('L05','都市'); +select * from type; +-- 2. 将story 表中的story_name字段类型改成varchar(40) 。(2分) +ALTER TABLE story MODIFY story_name VARCHAR(40); +-- 3. 在author表中增加一个性别字段 字段名:author_sex,类型: char(10),要求默认值为'男'。 (3分) +ALTER TABLE author DROP author_sex; +ALTER TABLE author ADD author_sex char(10)DEFAULT '男'; +-- 4. 将作家编号为1005、1007的作家性别改为'女' 。(2分) +UPDATE author SET author_sex = '女' WHERE author_id IN('1005','1007') +-- 5. 作家杜子腾,写了一篇名为《拜登夸我很帅》的都市小说,有854个浏览量,请将这条信息插入到story表。(3分) +DELETE FROM story WHERE views_number = 854 +INSERT INTO story(author_id,type_id,story_name,views_number) VALUES ((SELECT author_id FROM author WHERE author_name = '杜子腾'),'L05','拜登夸我很帅',854) +-- 6. 《拖拉机大战蜘蛛侠》这篇小说,浏览量涨了100,请更新story表中的相关数据。(2分) +UPDATE story SET views_number = views_number+100 WHERE story_name ='拖拉机大战蜘蛛侠'; +-- 7. 请删除story表的中《皇上滚开本宫只劫财》这篇小说相关数据。(2分) +DELETE FROM story WHERE story_name = '皇上滚开本宫只劫财'; +-- 8. 查询 浏览量大于 8000的小说的作者编号和小说作品名称。(2分) +SELECT author.author_id,story_name FROM author RIGHT JOIN story ON author.author_id = story.author_id WHERE views_number>8000; +-- 9. 查询积分大于1000 并且会员等级高于vip03的作家所有信息。(3分) +SELECT * FROM author LEFT JOIN vip ON author.vip_id = vip.vip_id WHERE credits>1000 AND vip.vip_id NOT IN('VIP01','VIP02','VIP03'); +-- 10. 查询姓名以杜字开头的作家的姓名,积分和等级编号。(3分) +SELECT author_name,credits,vip_id FROM author WHERE author_name LIKE '杜%'; +-- 11. 查询积分在100、1000之间的作家信息,以积分降序排列。 (3分) +SELECT * FROM author WHERE credits BETWEEN 100 AND 1000 ORDER BY credits DESC; +-- 12. 查询出小说的总浏览量,最高浏览量,最小浏览量,平均浏览量,给字段用上中文别名。(3分) +SELECT SUM(views_number)总浏览量,MAX(views_number)最大浏览量,MIN(views_number)最小浏览量,AVG(views_number)平均浏览量 FROM story; +-- 13. 查询各种等级的作家的平均积分和作家数量,并对查询结果使用中文别名。(3分) +SELECT vip.vip_id 等级,AVG(credits) 平均积分,COUNT(*) 作家数量 FROM author +LEFT JOIN vip ON author.vip_id = vip.vip_id +GROUP BY author.vip_id; +-- 14. 查询小说数量大于等于2的分类编号和小说数量。(4分) +SELECT type_id,COUNT(*) FROM story GROUP BY type_id HAVING COUNT(type_id)>=2; +-- 15. 查询所有小说中浏览量最少的书的作品编号、作品名称和类型编号、浏览量。(4分) +SELECT story.author_id,story.story_name,story.type_id,story.views_number FROM story WHERE views_number =(SELECT MIN(views_number) FROM story); +-- 16. 查询积分比刘产高的作者所有信息。(5分) +SELECT * FROM author WHERE credits>(SELECT credits FROM author WHERE author_name = '刘产'); +-- 17. 查询出哪些白银作家是没有写小说的,显示这些作家的姓名、等级名称。?(8分) +SELECT author.author_name,author.vip_id FROM author LEFT JOIN story ON author.author_id = story.author_id +WHERE author.vip_id=(SELECT vip_id FROM vip WHERE vip_name = '白银作家')AND author.author_id IS NULL; +-- 18. 找出写过作品浏览量大于5000的作家的所有作品中浏览量不到1000的作品信息(8分) +SELECT * FROM story WHERE author_id IN (SELECT author_id FROM story WHERE views_number>5000) AND views_number<1000; +-- 19. 查询所有小说的小说编号、小说名称、浏览量、分类名称、作者姓名、作者积分、作者等级名称,结果字段要用中文别名,并按浏览量降序排列,如果浏览量一样的,再按积分降序排列。(10分) +SELECT s.story_id 小说编号,s.story_name 小说名称,s.views_number 浏览量,a.author_name 分类名称,a.credits 作者积分,v.vip_name 作者等级名称 FROM author a +LEFT JOIN story s ON a.author_id = s.author_id +LEFT JOIN vip v ON a.vip_id = v.vip_id +ORDER BY views_number DESC,credits DESC; +``` -- Gitee From 74297f23dd675ce85ac38017ff36c773498f9dc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E5=BF=97=E9=B9=8F?= <326806914@qq.com> Date: Sat, 25 Mar 2023 04:10:05 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E8=81=94=E8=A1=A8=E5=AD=90=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 朱志鹏 <326806914@qq.com> --- ...03\344\271\240\347\264\240\346\235\220.md" | 337 ++++++++++++++++++ 1 file changed, 337 insertions(+) create mode 100644 "10 \346\234\261\345\277\227\351\271\217/\350\201\224\350\241\250\345\255\220\346\237\245\350\257\242\347\273\203\344\271\240\347\264\240\346\235\220.md" diff --git "a/10 \346\234\261\345\277\227\351\271\217/\350\201\224\350\241\250\345\255\220\346\237\245\350\257\242\347\273\203\344\271\240\347\264\240\346\235\220.md" "b/10 \346\234\261\345\277\227\351\271\217/\350\201\224\350\241\250\345\255\220\346\237\245\350\257\242\347\273\203\344\271\240\347\264\240\346\235\220.md" new file mode 100644 index 0000000..03d63b7 --- /dev/null +++ "b/10 \346\234\261\345\277\227\351\271\217/\350\201\224\350\241\250\345\255\220\346\237\245\350\257\242\347\273\203\344\271\240\347\264\240\346\235\220.md" @@ -0,0 +1,337 @@ +```sql +```mysql +create database rrr charset utf8; +use rrr; +create table price( + id int primary key auto_increment, -- 价格编号 + price double -- 水果价格 +); + +insert into price values(1,2.30); +insert into price values(2,3.50); +insert into price values(4,null); +insert into price values(3,5.5); + +select * from price; + +create table fruit( + id int primary key auto_increment, -- 水果编号 + name varchar(20) not null, -- 水果名称 + price_id int, -- 价格编号 + foreign key(price_id) references price(id) +); + +-- 插入水果的数据 +insert into fruit values(1,'苹果',1); +insert into fruit values(2,'橘子',2); +insert into fruit values(3,'香蕉',null); + +select * from fruit; + + + -- 多表查询 + -- 3.1.笛卡尔积 + -- 需求:查询水果和价格信息 + select * from fruit left join price on fruit.id = price.id; + +-- 3.2.内连接 +-- 避免笛卡尔积问题怎么处理? + select * from fruit,price where fruit.price_id=price.id + + +-- 练习:查询苹果信息,显示苹果id和价格 +-- 分析:在水果表中可以查看苹果id 名字 ,在价格表中可以查看价格和价格id +select name,price.price from fruit inner join price on fruit.id = price.id and fruit.name ='苹果'; +-- 3.3左外连接 +-- 练习:查询所有水果信息和对应价格信息 +select name,price from fruit left join price on fruit.id = price.id; +-- 3.4右外连接 +-- 练习:使用右外连接查询所有价格对应的水果名称和价格信息, +select name,price from price right join fruit on price.id = fruit.id; + +create database ting charset utf8; +use ting; +CREATE TABLE dept ( + id INT PRIMARY KEY AUTO_INCREMENT, -- 部门编号 + NAME VARCHAR(20) -- 部门名称 + ); + + INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部'); +select * from dept; + -- 创建员工表 n + 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); + +select * from emp; + +-- 1.查询工资最高的员工是谁 +select NAME,max(salary) from emp; +-- 2.查询工资小于平均工资的员工有哪些? + -- 2.1在emp员工表中查询平均工资 -- 单行单列 5860 + -- 2.2在emp员工表中查询小于上述的平均工资查询员工信息 + select NAME from emp where salary < (select avg(salary) from emp); +-- 3.查询工资大于5000的员工,来自于哪些部门,显示部门的名字 + -- 3.1 在员工表emp中查询工资大于5000的员工部门编号 -- 1 2 单列多值 作为子查询的条件使用in + -- 3.2在dept部门表中根据上述查询的部门编号查询部门名字 +select NAME from dept where id in(select dept.id from emp where salary >5000); +-- 4. 查询开发部与财务部所有的员工信息 + -- 4.1 在dept表查询开发部和财务部的部门编号 -- 1 3 多行单列 作为子查询的条件使用in + -- 4.2在emp员工表中根据上述查询的部门编号查询员工信息 + +select * from emp where dept_id in (select id from dept where name in('开发部','财务部')) +-- 5.查询出2011年以后入职的员工信息,包括部门名称 + -- 5.1在emp表中查询2011年以后入职的员工信息 -- 多行多列,作为子查询一般使用as起别名作为临时表和其他表查询. + -- 5.2 将上述查询的结果作为临时表和dept表关联查询最后查询员工信息和部门名称 + +create database sig charset utf8; +use sig; +-- 5.多表练习 子查询 +-- 教师表 + create table teacher ( + id int(11) primary key auto_increment, -- 教师编号 + name varchar(20) not null unique -- 教师姓名 + ); + +-- 学生表 + create table student ( + id int(11) primary key auto_increment, -- 学生编号 + name varchar(20) NOT NULL unique, -- 学生姓名 + city varchar(40) NOT NULL, -- 学生城市 + age int -- 学生年龄 + ) ; + +-- 课程信息表 + create table course( + id int(11) primary key auto_increment, -- 课编号 + name varchar(20) not null unique, -- 课程名称 + teacher_id int(11) not null, -- 教师编号 + foreign key(teacher_id) references teacher (id) + ); + +-- 学生选课表 + create table studentcourse ( + student_id int NOT NULL, -- 学生编号 + course_id int NOT NULL, -- 课程编号 + score double NOT NULL, -- 考试成绩 + foreign key (student_id) references student (id), + foreign key (course_id) references course (id) + ); + + insert into teacher values(null,'关羽'); + insert into teacher values(null,'张飞'); + insert into teacher values(null,'赵云'); +select * from teacher; + insert into student values(null,'小王','北京',20); + insert into student values(null,'小李','上海',18); + insert into student values(null,'小周','北京',22); + insert into student values(null,'小刘','北京',21); + insert into student values(null,'小张','上海',22); + insert into student values(null,'小赵','北京',17); + insert into student values(null,'小蒋','上海',23); + insert into student values(null,'小韩','北京',25); + insert into student values(null,'小魏','上海',18); + insert into student values(null,'小明','广州',20); +select * from student; + insert into course values(null,'语文',1); + insert into course values(null,'数学',1); + insert into course values(null,'生物',2); + insert into course values(null,'化学',2); + insert into course values(null,'物理',2); + insert into course values(null,'英语',3); +select * from course; + insert into studentcourse values(1,1,80); + insert into studentcourse values(1,2,90); + insert into studentcourse values(1,3,85); + insert into studentcourse values(1,4,78); + insert into studentcourse values(2,2,53); + insert into studentcourse values(2,3,77); + insert into studentcourse values(2,5,80); + insert into studentcourse values(3,1,71); + insert into studentcourse values(3,2,70); + insert into studentcourse values(3,4,80); + insert into studentcourse values(3,5,65); + insert into studentcourse values(3,6,75); + insert into studentcourse values(4,2,90); + insert into studentcourse values(4,3,80); + insert into studentcourse values(4,4,70); + insert into studentcourse values(4,6,95); + insert into studentcourse values(5,1,60); + insert into studentcourse values(5,2,70); + insert into studentcourse values(5,5,80); + insert into studentcourse values(5,6,69); + insert into studentcourse values(6,1,76); + insert into studentcourse values(6,2,88); + insert into studentcourse values(6,3,87); + insert into studentcourse values(7,4,80); + insert into studentcourse values(8,2,71); + insert into studentcourse values(8,3,58); + insert into studentcourse values(8,5,68); + insert into studentcourse values(9,2,88); + insert into studentcourse values(10,1,77); + insert into studentcourse values(10,2,76); + insert into studentcourse values(10,3,80); + insert into studentcourse values(10,4,85); + insert into studentcourse values(10,5,83); +select * from studentcourse; + +-- 1.查询获得最高分的学生信息。 + -- 1.1 在中间表中查询最高分-- 95 单行单列 +SELECT MAX(score) FROM studentcourse + -- 1.2 在中间表中根据上述查询的最高分查询学生id + SELECT student_id FROM studentcourse WHERE score = (SELECT MAX(score) FROM studentcourse) + -- 1.3在学生表中根据上述查询的学生id查询学生信息 + SELECT * FROM student WHERE id = (SELECT student_id FROM studentcourse WHERE score = (SELECT MAX(score) FROM studentcourse)) + -- 一个班级最高分95,可以有多名学员,结果有可能是多行多列 + SELECT * FROM studentcourse WHERE score =95 +-- 2.查询编号是2的课程比编号是1的课程最高成绩高的学生信息。 + -- 2.1在中间表查询课程编号是1的最高分数 -- 80 + SELECT MAX(score) FROM studentcourse WHERE course_id = 1 + -- 2.2在中间表中查询课程编号是2并且分数大于上述结果的学生编号 -- 多行单列 + SELECT student_id FROM studentcourse WHERE course_id = 2 AND score>(SELECT MAX(score) FROM studentcourse WHERE course_id = 1 ) + -- 2.3 在学生表中根据上述查询的学生编号查询学生信息 + SELECT * FROM student WHERE id IN(SELECT student_id FROM studentcourse WHERE course_id = 2 AND score>(SELECT MAX(score) FROM studentcourse WHERE course_id = 1 )) + +-- 3.查询编号是2的课程比编号是1的课程最高成绩高的学生姓名和成绩。 + -- 3.1在中间表查询课程编号是1的最高分数 -- 80 + SELECT MAX(score) FROM studentcourse WHERE course_id = 1; + -- 3.2在中间表中查询课程编号是2并且分数大于上述结果的学生编号和分数 -- 多行多列作为临时表 + SELECT student_id FROM studentcourse WHERE course_id = 2 AND score>(SELECT MAX(score) FROM studentcourse WHERE course_id = 1 ) + -- 3.3 将上述查询的结果作为临时表 + +-- 4.查询每个同学的学号、姓名、选课数、总成绩 + -- 4.1在中间表中根据学号分组查询学号 选课数 总成绩 -- 多行多列,作为临时表 + SELECT student_id, COUNT(course_id),SUM(score) FROM studentcourse GROUP BY student_id; + -- 4.2将上述查询的结果作为临时表和学生表进行关联查询 + SELECT * FROM student LEFT JOIN (SELECT student_id, COUNT(course_id),SUM(score) FROM studentcourse GROUP BY student_id) er on student.id = er.student_id; + + +select tmp.*, dept.name from (secreate database sii charset utf8; +use sii; +create database sting charset utf8; +use sting; +-- 6.多表练习 连接查询 + -- 部门表 + CREATE TABLE dapt ( + id INT PRIMARY KEY PRIMARY KEY, -- 部门id + dname VARCHAR(50), -- 部门名称 + loc VARCHAR(50) -- 部门位置 + ); + -- 添加4个部门 + INSERT INTO dapt(id,dname,loc) VALUES + (10,'教研部','北京'), + (20,'学工部','上海'), + (30,'销售部','广州'), + (40,'财务部','深圳'); +select * from dapt; + -- 职务表,职务名称,职务描述 + CREATE TABLE job ( + id INT PRIMARY KEY, -- 职务编号 + jname VARCHAR(20), -- 职务名称 + description VARCHAR(50) -- 职务简介 + ); + + -- 添加4个职务 + INSERT INTO job (id, jname, description) VALUES + (1, '董事长', '管理整个公司,接单'), + (2, '经理', '管理部门员工'), + (3, '销售员', '向客人推销产品'), + (4, '文员', '使用办公软件'); +select * from job; + -- 员工表 + CREATE TABLE emp ( + id INT PRIMARY KEY, -- 员工id + ename VARCHAR(50), -- 员工姓名 + job_id INT, -- 职务id + mgr INT , -- 上级领导 + joindate DATE, -- 入职日期 + salary DECIMAL(7,2), -- 工资 + bonus DECIMAL(7,2), -- 奖金 + dapt_id INT, -- 所在部门编号 + CONSTRAINT wmp_job_id_ref_job_id_fk FOREIGN KEY (job_id) REFERENCES job (id), + CONSTRAINT wmp_dept_id_ref_dapt_id_fk FOREIGN KEY (dapt_id) REFERENCES dapt (id) + ); + + -- 添加员工 + INSERT INTO emp(id,ename,job_id,mgr,joindate,salary,bonus,dapt_id) VALUES + (1001,'孙悟空',4,1004,'2000-12-17','8000.00',NULL,20), + (1002,'卢俊义',3,1006,'2001-02-20','16000.00','3000.00',30), + (1003,'林冲',3,1006,'2001-02-22','12500.00','5000.00',30), + (1004,'唐僧',2,1009,'2001-04-02','29750.00',NULL,20), + (1005,'李逵',4,1006,'2001-09-28','12500.00','14000.00',30), + (1006,'宋江',2,1009,'2001-05-01','28500.00',NULL,30), + (1007,'刘备',2,1009,'2001-09-01','24500.00',NULL,10), + (1008,'猪八戒',4,1004,'2007-04-19','30000.00',NULL,20), + (1009,'罗贯中',1,NULL,'2001-11-17','50000.00',NULL,10), + (1010,'吴用',3,1006,'2001-09-08','15000.00','0.00',30), + (1011,'沙僧',4,1004,'2007-05-23','11000.00',NULL,20), + (1012,'李逵',4,1006,'2001-12-03','9500.00',NULL,30), + (1013,'小白龙',4,1004,'2001-12-03','30000.00',NULL,20), + (1014,'关羽',4,1007,'2002-01-23','13000.00',NULL,10); +select * from emp; + -- 工资等级表 + CREATE TABLE salarygrade ( + grade INT PRIMARY KEY, + losalary INT, -- 最低薪资 + hisalary INT -- 最高薪资 + ); + + -- 添加5个工资等级 + INSERT INTO salarygrade(grade,losalary,hisalary) VALUES + (1,7000,12000), + (2,12010,14000), + (3,14010,20000), + (4,20010,30000), + (5,30010,99990); +select * from salarygrade; +-- 1.查询所有员工信息。显示员工编号,员工姓名,工资,职务名称,职务描述。 + -- 1.1 确定几张表关联查询:2张表 emp job + -- 1.2 确定连接查询的条件即避免笛卡尔积的条件 emp.job_id = job.id + SELECT * FROM wmp INNER JOIN job on wmp.job_id = job.id + -- 1.3 确定要查询的结果字段:员工编号,员工姓名,工资,职务名称,职务描述 + SELECT c.id,c.ename,c.salary,k.jname,k.description FROM emp c INNER JOIN job k on c.job_id = k.id + +-- 2.查询所有员工信息。显示员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置 + -- 2.1 确定几张表关联查询:3张表 emp job dept + -- 2.2 确定连接查询的条件即避免笛卡尔积的条件 emp.job_id = job.id and emp.dept_id=dept.id + -- 2.3 确定要查询的结果字段:员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置 + SELECT c.id,c.ename,c.salary,k.jname,k.description,d.dname,d.loc FROM emp c INNER JOIN job k on c.job_id = k.id INNER JOIN dapt d on c.dapt_id = d.id + +/* + 连接查询规律: + 1.确定几张表关联 + 2.确定连接查询的条件 + 3.确定要查询的结果字段 + 4.如果是n张表关联,那么避免笛卡尔积的条件的个数是:n-1 + */ + + +-- 3.查询所有员工信息。显示员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级。 + -- 1.确定几张表关联 4张表 emp job dept salarygrade + -- 2.确定连接查询的条件 :emp.job_id = job.id and emp.dept_id=dept.id + -- 其他条件:e.salary between salarygrade.losalary and salarygrade.hisalary + -- 3.确定要查询的结果字段 +SELECT * FROM emp c LEFT JOIN job k on c.job_id = k.id LEFT JOIN dapt d on c.dapt_id = d.id LEFT JOIN salarygrade s on k.id =s.grade + +-- 4.查询出每个部门的部门编号、部门名称、部门位置、部门人数 + -- 4.1 在emp表中按照部门编号分组查询部门编号和每个部门人数 + -- 4.2 几张表关联:dept 上述临时表 + -- 4.3 条件 dept.id和临时表的dept_id相等 + -- 4.4 分析查询的结果部门编号、部门名称、部门位置、部门人数 +select * from emp where join_date > '2011-01-01') as tmp,dept where tmp.dept_id = dept.id; + +``` + +``` -- Gitee