【MySQL】SQL语法练习

SQL语法练习

sql资源

/*demo.sql*/


CREATE TABLE t_dept(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20)
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

CREATE TABLE t_emp(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20),
    salary DOUBLE,
    dept_id INT,
    manager_id INT,
    FOREIGN KEY(dept_id) REFERENCES t_dept(id),
    FOREIGN KEY(manager_id) REFERENCES t_emp(id)
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

INSERT INTO t_dept (id,name) VALUES (10,'accounting');
INSERT INTO t_dept (id,name) VALUES (20,'research');
INSERT INTO t_dept (id,name) VALUES (30,'sales');
INSERT INTO t_dept (id,name) VALUES (40,'operations');

INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7839, 'king', NULL, 5000, NULL);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7566, 'jones', 7839, 2975, 20);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7698, 'blake', 7839, 2850, 30);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7782, 'clark', 7839, 2450, 10);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7788, 'scott', 7566, 3000, 20);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7902, 'ford', 7566, 3000, 20);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7499, 'allen', 7698, 1600, 30);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7521, 'ward', 7698, 1250, 30);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7654, 'martin', 7698, 1250, 30);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7844, 'turner', 7698, 1500, 30);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7900, 'james', 7698, 950, 30);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7934, 'miller', 7782, 1300, 10);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7876, 'adams', 7788, 1100, 20);
INSERT INTO t_emp (id, name, manager_id, salary, dept_id) VALUES (7369, 'smith', 7902, 800, 20);

– ---------------------基础查询---------------------------------
– 1.查询 部门表中的所有数据

SELECT * FROM `t_dept`;

在这里插入图片描述

– 2.查询 所有员工的 姓名 和 薪资

SELECT name,salary FROM `t_emp`;

在这里插入图片描述

– ---------------------条件查询---------------------------------
– 3.查询 所有员工的 姓名 和 年薪

SELECT name,salary*12 as annual FROM `t_emp`;

在这里插入图片描述

– 4.查询 boss 的姓名(manager_id 为null 的)

SELECT name FROM `t_emp` WHERE manager_id IS NULL;

在这里插入图片描述

– 5.查询 所有薪资 低于2000 的员工

SELECT name FROM `t_emp`
WHERE manager_id IS NOT NULL and salary<2000;

在这里插入图片描述

– 6.查询 所有薪资 在 2000- 3000 之间的员工信息

SELECT * FROM `t_emp` 
WHERE manager_id IS NOT NULL and salary BETWEEN 2000 and 3000;

在这里插入图片描述

– 7.查询10号部门的所有的员工信息和 老板的信息

SELECT * FROM `t_emp` 
WHERE dept_id =10 or dept_id is null ;

在这里插入图片描述

– ---------------------ifnull---------------------------------
– 8 查询所有员工的姓名和 部门编号,没有部门 , 显示 BOSS

SELECT name,IFNULL(dept_id,'BOSS') FROM `t_emp`  ;

在这里插入图片描述

– ---------------------distinct---------------------------------
– 9 查询员工分布在哪些部门

SELECT distinct dept_id FROM `t_emp`  ;

在这里插入图片描述

– ---------------------作业---------------------------------
– 10. 查询20号部门所有的员工姓名和薪资

SELECT name,salary FROM `t_emp` WHERE dept_id = 20  ;

在这里插入图片描述

– 11.查询所有年薪>40000的员工姓名和部门编号,如果为null ,显示BOSS

SELECT name,IFNULL(dept_id,'BOSS')
FROM `t_emp` WHERE salary*12>40000 ;

在这里插入图片描述

– 12.查询所有月薪 > 4000 或者 月薪 < 3000 的员工姓名

SELECT name FROM `t_emp` 
WHERE salary>4000 OR salary <3000 ;

在这里插入图片描述

– 13.查询10号部门和20号部门的所有员工的姓名(2种方式)

SELECT name FROM `t_emp` 
WHERE dept_id =10 OR dept_id =20 ;

在这里插入图片描述

SELECT name FROM `t_emp` WHERE dept_id in (10,20);

在这里插入图片描述

– 14.查询除了10号部门和20号部门的所有员工的姓名(2种方式:此题有坑)

SELECT name FROM `t_emp` 
WHERE dept_id NOT IN (10,20);
SELECT name FROM `t_emp` 
WHERE dept_id !=10 AND dept_id !=20 AND dept_id IS NOT NULL;

在这里插入图片描述

– ---------------------order by-----------------------
– 15.查询员工的年薪,ResultSet中显示的名字是 salary of year,按照降序排序

SELECT salary*12 AS 'salary of year' 
FROM `t_emp` WHERE  dept_id IS NOT NULL
ORDER BY salary DESC;

在这里插入图片描述

– 16.查询员工的姓名和部门编号,按照部门编号降序排序

SELECT name,dept_id FROM `t_emp` 
WHERE  dept_id IS NOT NULL 
ORDER BY dept_id DESC;

在这里插入图片描述

– --------------------------常用函数---------------------------
– 17.修改所有员工的姓名:前面追加e_ , 后面追加 id 值

UPDATE t_emp
SET name = CONCAT('e_',`name`,`id`) 
WHERE dept_id IS NOT NULL;

在这里插入图片描述

– --------------------------组函数---------------------------
– 18. 求20号部门的最高薪资

SELECT MAX(salary) FROM t_emp WHERE dept_id =20;

在这里插入图片描述

– 19. 求10号部门的最低薪资

SELECT Min(salary) FROM t_emp WHERE dept_id =10;

在这里插入图片描述

– 20. 求员工的平均薪资

SELECT avg(salary) FROM t_emp WHERE dept_id is not null;

在这里插入图片描述

– 21. 求员工的薪资总和

SELECT sum(salary) FROM t_emp WHERE dept_id is not null;

在这里插入图片描述

– 22. 求30号部门的员工数量

SELECT COUNT(id) FROM t_emp WHERE dept_id =30;

在这里插入图片描述

– 23. 求所有员工的部门的数量

SELECT COUNT(DISTINCT dept_id) 
FROM t_emp WHERE dept_id IS NOT NULL;

在这里插入图片描述

– 24. 将7934号员工的薪资 修改为 null

UPDATE t_emp
set salary = null WHERE id = 7934;
SELECT * FROM t_emp;

在这里插入图片描述

– 25. 求10号部门的平均薪资,null 认为薪资为0

SELECT AVG(IFNULL(salary,0)) FROM t_emp WHERE dept_id = 10;

在这里插入图片描述

– --------------------------子查询---------------------------
– 26. 找出所有allen 的同部门同事

SELECT * FROM t_emp 
WHERE dept_id =( SELECT dept_id FROM t_emp WHERE name = 'allen');

在这里插入图片描述

– 27. 找出所有的领导的姓名

SELECT name FROM t_emp WHERE	dept_id IS NULL;

在这里插入图片描述

– 28. 找出所有 不是领导的 员工姓名

SELECT name FROM t_emp WHERE	dept_id IS NOT NULL;

在这里插入图片描述

– 29. 找出所有没有员工的部门

SELECT d.id 
FROM t_dept d 
LEFT JOIN t_emp e ON d.id = e.dept_id 
WHERE	e.dept_id IS NULL;

在这里插入图片描述

– 30. 找出所有工资比martin高的员工

SELECT name FROM t_emp 
WHERE salary > (SELECT salary FROM t_emp WHERE name ='martin');

在这里插入图片描述

– 31. 找出各个部门工资最低的员工姓名和薪资

SELECT name,salary FROM t_emp e WHERE salary = (
SELECT MIN(salary) FROM t_emp WHERE dept_id = e.dept_id);

在这里插入图片描述

– 32. 找出人数最多的部门的部门名称

SELECT name
FROM t_dept
WHERE id = (
    SELECT dept_id
    FROM (
        SELECT dept_id, COUNT(*) AS employee_count
        FROM t_emp
        GROUP BY dept_id
    ) AS subquery_dept_counts
    ORDER BY employee_count DESC
    LIMIT 1
);

在这里插入图片描述

– 33.找出那些部门的平均薪资比research部门的平均薪资高,需要平均薪资和部门编号,按照平均薪资降序排序

SELECT
	dept_id,
	AVG(
	IFNULL( salary, 0 )) AS avs 
FROM
	t_emp 
WHERE
	dept_id IS NOT NULL 
GROUP BY
	dept_id 
HAVING
	AVG(
	IFNULL( salary, 0 )) > ( SELECT AVG( IFNULL( salary, 0 )) FROM t_emp WHERE dept_id = ( SELECT id FROM t_dept WHERE NAME = 'research' ) ) 
ORDER BY
	avs DESC;

在这里插入图片描述

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL基础语法练习可以包括创建表、插入数据、查询数据等操作。以下是一些常用的MySQL基础语法练习: 1. 创建表: 使用CREATE TABLE语句可以创建一个MySQL数据表。通用的创建表的SQL语法为: CREATE TABLE table_name ( column_name column_type ); 2. 插入数据: 使用INSERT INTO语句可以向MySQL数据表中插入数据。通用的插入数据的SQL语法为: INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); 3. 查询数据: 使用SELECT语句可以从MySQL数据表中查询数据。通用的查询数据的SQL语法为: SELECT column1, column2, ... FROM table_name WHERE condition; 4. 更新数据: 使用UPDATE语句可以更新MySQL数据表中的数据。通用的更新数据的SQL语法为: UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; 5. 删除数据: 使用DELETE FROM语句可以删除MySQL数据表中的数据。通用的删除数据的SQL语法为: DELETE FROM table_name WHERE condition; 通过练习这些基础语法,你可以更好地理解和应用MySQL数据库的操作。希望对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MySQL最全的基础语法练习](https://blog.csdn.net/qq_52688430/article/details/123413064)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [MySQL数据库常用基础操作视频教程](https://download.csdn.net/download/weixin_36643308/88220206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值