test02

create database test02;
use test02;
drop table if exists emp;
drop table if exists dept ;
create table dept (
    d_id int ( 5 ) not null PRIMARY KEY UNIQUE auto_increment,
    d_name varchar ( 5 ) not null,
    `function` varchar ( 10 ) not null,
  d_address varchar ( 5 ) not null 
);

INSERT INTO dept values (1,'人事部','人力公共事物管理','A501'),(2,'市场部','市场业务管理','A502'),(3,'科研部','新产品研发','A503'),(4,'运维部','公司系统运维支持','A503');


drop table if exists emp;
create table emp (
    e_id int(10) PRIMARY KEY UNIQUE auto_increment,
    e_name  varchar(10) not null,
    e_sex   varchar(1) not null,
    e_age   int(3)  null,
    d_id int(5) ,
    FOREIGN key (`d_id`) REFERENCES dept(`d_id`),
    e_wages int(8) not null,
    e_adress varchar(20) not null
    );
insert into emp values (20040001,'胡一智','男',28,1,8500,'北京王府井'),
(20040002,'于小燕','女',30,2,7800,'中国北京后海'),
(20040003,'张三丰','男',42,1,9100,'北京罗马尼亚'),
(20040004,'李梅','女',51,3,6300,'上海'),
(20040005,'张林','女',38,3,8400,'北京小胡同'),
(20040006,'陈燕妮','女',null,4,5500,'里约热内卢'),
(20040007,'李晓超','男',44,4,7900,'天津');
select * from emp e, dept d where d.d_id = e.d_id;



-- 1.查询emp表的所有记录。或者列出emp表的所有字段名称
select * from emp;
DESCRIBE  emp;
-- 2.查询emp表的第4-5条记录
select * from emp LIMIT 3,2;
-- 3.从dept表中查询部门号(d_id)、部门名称(d_name)和部门职能(function)
select d_id 部门号,d_name 部门名称,`function` 部门职能 from dept ;
-- 4.从emp表中查询人事部和科研部的员工信息。先从dept表查询出人事部和科研部的部门号。然后到emp表中查询员工的信息
select * from emp e where e.d_id in (select d_id from dept where d_name in( '人事部' ,'科研部'));
-- 5.从emp表中查询年龄在25-30的员工信息。可以通过两种方式来查询
select * from emp where e_age BETWEEN 25 AND 30;
select * from emp where e_age >= 25 and e_age <=30;
-- 6.查询每个部门有多少员工。先按部门号进行分组,然后用聚合函数来计算每组的人数
select d.d_name,count(*) from emp e,dept d where e.d_id = d.d_id group by d_name; 
-- 7.查询每个部门的最高工资。先按部门号进行分组,然后用聚合函数来计算最大值
select d.d_name,max(e_wages) from emp e,dept d where e.d_id = d.d_id group by d_name; 
-- 8.用左连接的方式查询dep表和emp表
select * from dept d LEFT JOIN emp e on d.d_id = e.d_id;
-- 9.计算每个部门的总工资。先按部门号进行分组,然后用聚合函数来计算求和
select d.d_name 部门名称,sum(e_wages) 总工资 from emp e,dept d where e.d_id = d.d_id group by d_name; 
-- 10.查询emp表按照工资从高到低的顺序进行排序
select * from emp ORDER BY e_wages DESC;
-- 11.查询家是北京的员工的姓名、年龄、家庭地址。这里使用like关键字
select e_name 姓名,e_age 年龄,e_adress 家庭地址 from emp e where e_adress like '%北京%';

1、like的通配符有哪些?分别代表什么含义?

通配符 功能
通配符 功能
% 匹配零个或多个字符组成的任意字符串
_(下划线) 匹配任意一个字符

2、知道学生的出生日期,如何求出其年龄?

代码:year(now())-year(brith);

3、IS能用“=”来代替吗?如何周全的考虑“空数据”的情况?

不可以的,is是用来判断null的,比如 remark is null 或者remark is not null,=是用来直接比较值的;= 用在2种情况下:一是判断值是否相等 where id=1;二是用于赋值set id=1;用 is null去判断是否真的是空;

4、关键字ALL和DISTINCT有什么不同的含义?关键字ALL是否可以省略不写?

答:ALL表示所有的字段,有重复的2条,2 条都显示DISTINCT表示如果有重复的,只取一条;All关键字是可以省略,但是省略all关键字在select子句和union子句会产生很不一样的效果

5、聚合函数能否直接使用在SELECT、HAVING、WHERE、或者GROUPBY子句中?

答:聚集函数 可用于 select和having , group by中,where 是在 聚集函数计算前筛选数据,having, group by 是在聚集函数计算后筛选数据;

6、WHERE字句与HAVING子句有何不同

1、作用对象不同:where子句作用于表(或视图)中得行,而having子句作用于形成的组;where子句限定查找的行,having子句限定查找的组;
2、执行顺序不同:若查询语句中同时有where子句和Having子句,执行时先去掉不满足where条件的行,然后分组,分组后再去掉不满足having条件的组;
3、where自居不能直接使用聚合函数,having子句条件中可以包含聚合函数

7、count(*)、count(列名)、count(distinct列名)三者有什么区别?通过一个示例来说明

count(*):是统计所有的个数不管是否重复,是否为空值;
count(列名):不统计为空值的行;
count(distinct 列名):统计不重复的行数为多少;
比如:

Num1
1
2
null
2

Count(*)=4;
Count(Num1)=3;
Count(distinct Num1)=3;

8、内连接与外连接有什么区别?

答:内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。
右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。
全外连接:左外连接 union 右外连接。

9、“=”与in在什么情况下作用相同?

当in的候选值只有一个的时候;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容