数据库练习二:查询语句练习

原文博客:Doi技术团队
链接地址:https://blog.doiduoyi.com
初心:记录优秀的Doi技术团队学习经历

先进行sql语句的练习,然后再根据语句进行优化以及建立索引。


# 1查看雇员编号、名字和部门
select e.emp_no,e.last_name,de.dept_name from 
    employees as e,dept_emp as emp,departments as de where
    e.emp_no = emp.emp_no and de.dept_no=emp.dept_no ;


# 2显示所有雇员的编号、姓名、工资
select e.emp_no,concat(e.first_name,' ', e.last_name) `name`,sa.salary from
    employees as e,salaries as sa where
    e.emp_no=sa.emp_no limit 100;


# 3查找在d005号部门工作的雇员
select e.emp_no,concat(e.first_name,' ', e.last_name) `name`,de.dept_name from
    employees as e,dept_emp as emp,departments as de where
    de.dept_no='d005' and de.dept_no=emp.dept_no and e.emp_no=emp.emp_no;

# 4要求查找职位为Engineer和Senior Engineer的雇员姓名(last_name)
select e.last_name from 
    employees as e ,titles as ti where
    e.emp_no=ti.emp_no and
    (ti.title='Engineer' or ti.title='Senior Engineer') ;

select e.last_name from 
    employees as e ,titles as ti where
    e.emp_no=ti.emp_no and
    ti.title in ('Engineer','Senior Engineer') ;

# 5查找职位不是Engineer和Senior Engineer的部门编号,雇员部门及姓名。将姓名显示为(first_name+last_name命名为”Name”)

select concat(e.first_name,' ',last_name) `name`,de.dept_no,de.dept_name from
    employees as e ,dept_emp as emp , departments as de , titles as ti where
    e.emp_no = ti.emp_no and e.emp_no = emp.emp_no and emp.dept_no=de.dept_no and
    ti.title != 'Engineer' and ti.title != 'Senior Engineer' ;

## 会发现数据有重复,那是因为在员工职称表(title)里,有些员工是兼顾多个职称的。

# 6查找哪些雇员的工资在60000到90000之间
select concat(e.first_name,' ',last_name) `name`,salary from
    employees as e,salaries where
    e.emp_no = salaries.emp_no and
    salaries.salary between 60000 and 90000;

# 7查找哪些雇员的工资不在60000到90000之间
select concat(e.first_name,' ',last_name) `name`,salary from
    employees as e,salaries where
    e.emp_no = salaries.emp_no and
    salaries.salary not between 60000 and 90000;

# 8查找first_name以P开头,后面仅有四个字母的雇员信息
select distinct concat(e.first_name,' ',last_name) `name` from
    employees as e where
    employees.first_name like "P____";

# 9查找last_name以K开头的雇员信息
select concat(e.first_name,' ',last_name) `name` from
    employees as e where
    e.last_name like "K%";

# 10查找名字以字母K开头,以i结尾,并且第三个字母为o的雇员名字(First_name)、职位和所在部门号
select concat(e.first_name,' ',last_name) `name` , emp.dept_no,title from
    employees as e,dept_emp as emp,titles where
    e.emp_no = emp.emp_no and
    e.emp_no = titles.emp_no and
    e.first_name like 'k_o%i';


# 11查找哪些雇员的职位名不以Se开头
select concat(e.first_name,' ',last_name) `name` , title from
    employees as e , titles where
    e.emp_no = titles.emp_no and
    titles.title not like 'Se%';

# 12查找d005号部门里不是Staff的雇员信息
select concat(e.first_name,' ',last_name) `name` , e.emp_no,title from
    employees as e ,titles as ti , dept_emp as emp where
    emp.dept_no = 'd005' and
    e.emp_no=emp.emp_no and
    e.emp_no = ti.emp_no and
    ti.title !='Staff';

# 13查找d005号部门工资大于100000的员工的信息
select concat(e.first_name,' ',last_name) `name` , e.emp_no,salary from
    employees as e ,salaries , dept_emp as emp where
    e.emp_no = emp.emp_no and
    emp.dept_no='d005'and
    e.emp_no = salaries.emp_no and
    salary >100000;


# 14按字母顺序显示雇员的名字(last_name)
select last_name from 
    employees 
    order by last_name;


# 15按部门编号降序显示雇员信息
select concat(e.first_name,' ',last_name) `name` , dept_no from
    employees as e ,dept_emp as emp where
    e.emp_no = emp.emp_no order by
    emp.dept_no desc ;


# 16计算每个部门的平均工资和工资总和.(显示平均值,总值,部门编号,部门名称 )
select  avg(salary) , count(salary) ,emp.dept_no,de.dept_name from
    employees as e ,salaries as sa ,dept_emp as emp,departments as de where
    e.emp_no=sa.emp_no and
    emp.emp_no=e.emp_no and
    emp.dept_no =de.dept_no group by
    dept_name ,dept_no order by dept_no;


# 17请算出employees表中每位雇员的平均工资
select first_name,last_name,avg(salary) salary from
    employees as e , salaries as sa where
    e.emp_no=sa.emp_no group by
    first_name,last_name order by salary ;


# 18请算出employees表中所有雇员的平均工资
select avg(salary) from
    employees as e , salaries as sa where
    e.emp_no=sa.emp_no ;


# 19请查询出employees表中的最低工资的员工信息

## 典型的慢查询
select concat(e.first_name,' ',last_name) `name` ,salary  from
    employees as e , salaries as sa where
    e.emp_no=sa.emp_no  order by
    salary  limit 1;

## 正确姿势
select concat(e.first_name,' ',last_name) `name` ,salary  from
    employees as e , salaries as sa where
    e.emp_no=sa.emp_no  and
    sa.salary= 
    (select min(salary)  from salaries);


# 20请计算出每个部门的平均工资、最高工资和最低工资
select  avg(salary) , count(salary) ,max(salary),min(salary),emp.dept_no,de.dept_name from
    employees as e ,salaries as sa ,dept_emp as emp,departments as de where
    e.emp_no=sa.emp_no and
    emp.emp_no=e.emp_no and
    emp.dept_no =de.dept_no group by
    dept_name ,dept_no order by dept_no; 

# 21查询薪水发放时间在1986-06-26 ~ 1987-06-25薪水高于46135号雇员并且工种与他相同的雇员情况。
select e.* ,sa.from_date from
    employees as e ,salaries as sa ,titles as ti where
    ti.title in 
    (select title from titles where emp_no=46135) and
    sa.from_date>'1986-06-26' and
    sa.to_date < '1987-06-25' and
    e.emp_no=sa.emp_no and
    e.emp_no = ti.emp_no and
    sa.salary >
     ( select salary from salaries as sa where 
     sa.from_date>'1986-06-26' and sa.to_date< '1987-06-25' and emp_no=46135);

# 22查询工资在10000到50000之间的雇员所在部门的所有人员的信息。
select e.*,de.dept_no,de.dept_no,salary from
    employees as e ,dept_emp as emp,departments as de ,salaries as sa where
    sa.salary in (select salary from salaries where salary between 10000 and 50000 ) and
    e.emp_no=emp.emp_no and
    emp.dept_no = de.dept_no and
    sa.emp_no =e.emp_no order by salary;

# 23查询出在薪水发放时间在1986-06-26 ~ 1987-06-25的员工信息
###(工号,姓名,性别,薪水,职位)
select e.emp_no , concat(e.first_name,' ',last_name) `name`, e.gender,salary,title from
    employees as e , salaries as sa , titles as ti where
    e.emp_no = sa.emp_no and
    e.emp_no = ti.emp_no and
    sa.from_date > '1986-06-26' and
    sa.to_date < '1987-06-25';
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容