表创建和数据操作
1.插入代码
-- 插入学生信息
INSERT INTO student ( stuid, NAME, age, sex )
VALUES
( 1, 'andy', 21, 'W' )
-- 新增科目信息
INSERT INTO `subject` ( subid , subname)
VALUES
( 1001 , 'oracle')
-- 新增成绩信息
INSERT INTO score ( scoid , stuid ,subid ,score)
VALUES
( 1 ,1 ,1001 ,8.5)
2.更新数据代码
-- 68.(update+commit):将姓名为andy的年龄改为22 性别改为’M’并保存
UPDATE student SET
age=22,sex='M'
WHERE `name`='andy'
-- 将stuid为1的成绩改为9.5并保存
UPDATE score
set score =9.5
WHERE `stuid`=1
-- 将stuid为1的成绩删除并保存
DELETE FROM score WHERE stuid=1;
3.基本的查询语句
-- 1. (select * )查询员工表中所有员工信息
SELECT * FROM employees;
-- 2. (select 列名)查询部门表中所有的部门名称
SELECT department_name FROM department;
-- 3. (select 列名1,列名2,...) 查询部门表中部门id及部门名称
SELECT department_id, department_name FROM department;
-- 4. (where条件判断)查询员工表中部门id为90的员工信息
-- 思路:1 查询所有员工信息 2.加where 筛选条件
SELECT * FROM employees WHERE department_id=90;
-- 5.(where ..and.. )查询员工表中部门id为90并且工资大于20000的员工信息
-- 思路:1 查询所有员工信息 2.加where 筛选条件1 and 筛选条件2
SELECT * FROM employees WHERE department_id=90 AND salary> 20000;
-- 6. (where..or..) 查询员工表中部门id为80或者90的员工信息
-- 思路:1.查询所有员工信息 2.加where 筛选条件1 or 筛选条件2
SELECT * FROM employees WHERE department_id in (80,90);
-- 7. (where..not..)查询90号部门工资不为24000的员工信息
-- 思路:1.查询所有员工信息 2.加where 筛选条件1 not 筛选条件2
SELECT * FROM employees
WHERE department_id = 90 AND salary NOT IN (24000);
-- 6. (||字符串拼接)查询员工表中员工全姓名(first_name:姓 last_name:名)
-- 思路:select 列名1||列名2 from 表名;
SELECT 'first_name' || ' ' || 'last_name' AS 员工姓名 FROM employees;
-- 7.(distinct)在SELECT语句查询中,要去掉查询结果中的重复记录,应该使用__ distinct ______关键字
SELECT DISTINCT * FROM employees;
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;
-- 8.(distinct)查询员工表中员工所属的部门id
-- 思路:select distinct 列名from 表名;
SELECT DISTINCT department_id FROM employees;
-- 9(order by desc)查询工资降序的员工信息
-- 思路:1.查询所有员工信息 2.根据工资降序排序
SELECT * FROM employees
ORDER BY salary ;
-- 10.(order by)查询入职日期由早到晚的员工信息
-- 思路:1.查询所有员工信息 2.根据入职日期升序排序
SELECT * FROM employees
ORDER BY hire_date DESC;
-- 11.(between .. and ..) 查询工资在10000到20000的员工信息
-- 思路:查询所有员工信息 2.根据工资(salary)进行筛选
SELECT * FROM employees
WHERE salary between 10000 and 20000;
-- 12.(not between .. and )查询工资不在10000到20000的员工信息
-- 思路:查询所有员工信息 2.根据工资(salary)进行筛选
SELECT * FROM employees
WHERE salary NOT between 10000 and 20000;
-- 13.(in(值1,值2,..))查询工资等于10000或者20000的员工信息
-- 思路:查询所有员工信息 2.根据工资(salary)进行筛选
SELECT * FROM employees
WHERE salary in (10000, 20000);
-- 14.(not in(值1,值2,..))查询工资不等于2000或者3000的员工信息
-- 思路:查询所有员工信息 2.根据工资(salary)进行筛选
SELECT * FROM employees
WHERE salary not in (2000, 3000);
-- 15.(is null)查询部门id为空的员工信息
-- 思路:查询所有员工信息 2.加where条件根据部门id进行筛选
SELECT * FROM employees
WHERE department_id IS NULL; ;
-- (is not null)查询没有提成但是有部门主管的员工信息
-- 思路:查询所有员工信息 2.加where条件根据提成和部门主管信息进行筛选
SELECT * FROM employees
WHERE department_id IS NOT NULL; ;
-- 17.(like ‘%’)查询80号部门中last_name以n结尾的所有员工信息
-- 思路:1.查询所有员工信息2.加where条件根据部门id及last_name进行筛选
SELECT * FROM employees
WHERE department_id = 80 AND last_name LIKE '%n';
-- 18.(like ‘_%’)查询90部门中first_name中第二个字母为t的员工信息
-- 思路:1.查询所有员工信息2.加where条件根据部门id及first_name进行筛选
SELECT * FROM employees
WHERE department_id = 90 AND first_name LIKE '_t%';
-- 19(like _%_)查询出所有first_name第二个字母为a而且长度为4的员工
-- 思路:1.查询所有员工信息2.加where条件根据first_name进行筛选
SELECT * FROM employees
WHERE first_name LIKE '_a__';
-- 20.(not like ‘_%’)查询出所有姓开头字母不是E的员工
-- 思路:1.查询所有员工信息2.加where条件根据first_name进行筛选
SELECT * FROM employees
WHERE first_name NOT LIKE 'E%';
--
-- 21(case when)显示公司里所有员工的工资级别
-- A <=5000
-- B >=5001 and <=8000
-- C >=8001 and <=15000
-- D >15000
SELECT employee_name,
CASE
WHEN salary <= 5000 THEN 'A'
WHEN salary >= 5001 AND salary <= 8000 THEN 'B'
WHEN salary >= 8001 AND salary <= 15000 THEN 'C'
ELSE 'D'
END AS 工资级别
FROM employees;
-- 22*(case when)显示学生表(student)里所有学生的成绩(score)级别
-- 优秀 <=90
-- 良好 >=75 and <90
-- 及格 >=60 and <75
-- 不及格 <60
SELECT student_name,
CASE
WHEN score <= 90 THEN '优秀'
WHEN score >= 75 AND score < 90 THEN '良好'
WHEN score >= 60 AND score < 75 THEN '及格'
ELSE '不及格'
END AS 成绩级别
FROM student;
4.DQL
-- 23(sysdate)获取
SELECT SYSDATE() as '当前时间';
-- 24.(sysdate)获取明天此刻的时间
SELECT SYSDATE() + INTERVAL 1 DAY as '明天此刻的时间';
-- 25.(to_char(值,格式))打印员工的工资按照$9999.99的格式显示
-- oracle中采用下面的格式
SELECT TO_CHAR(salary, '$9999.99') AS formatted_salary FROM employees;
-- mysql采用下面的格式
-- FORMAT代表的是要格式化的第一个数字,2表示要保留的小数,CONCAT去表示要显示的格式
SELECT CONCAT('$', FORMAT(9999.99, 2)) as '员工工资'
-- 26.(to_char(日期,日期格式))显示当前日期精确到时分秒
-- mmysql数据库中实现的方式
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_date;
-- oracle中的实现的方式
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM dual;
-- 27.(to_char(日期,日期格式))查询星期五入职的员工信息
SELECT *
FROM employees
WHERE TO_CHAR(hire_date, 'DAY') = 'FRIDAY';
-- mysql
SELECT *
FROM employees
WHERE DAYNAME(hire_date) = 'Friday';
-- 28.*(to_char(日期,日期格式))查询9月份入职的员工信息
-- mysql
SELECT *
FROM employees
WHERE DATE_FORMAT(hire_date, '%Y-%m') = '2022-09';
-- oracle
SELECT *
FROM employees
WHERE TO_CHAR(hire_date, 'YYYY-MM') = '2023-09';
-- 思路:1.查询所有员工信息2.加where条件根据入职月份进行筛选
-- 29.(to_date(字符串,’日期格式’))将‘2017-10-01’转换为日期并按‘yyyy/mm/dd’格式显示。
SELECT DATE_FORMAT(STR_TO_DATE('2017-10-01', '%Y-%m-%d'), '%Y/%m/%d');
-- 30.*(sysdate,to_date(字符串,’日期格式’))将‘2017-10-01’按‘yyyy/mm/dd’格式转换为日期并计算和当前时间相差的天数。
-- DATEDIFF天数差异
SELECT DATEDIFF(CURDATE(), STR_TO_DATE('2017-10-01', '%Y-%m-%d')) AS day_diff;
-- 31.(max(列名))查询90号部门工资最高的员工信息
-- 先找最高的工资再去找员工的信息
SELECT *
FROM employees
WHERE department_id = 90
AND salary = (
SELECT MAX(salary)
FROM employees
WHERE department_id = 90
);
-- 32.(max(列名))查询入职日期最晚的员工信息
SELECT *
FROM employees
WHERE hire_date =
(
SELECT MAX(hire_date) as last_hire_date
FROM employees
)
-- 33.(min(列名))查询80部门工资最低的员工信息
SELECT *
FROM employees
WHERE department_id = 80
AND salary = (
SELECT MIN(salary)
FROM employees
WHERE department_id = 80
);
-- 34.(min(列名))查询入职日期最早的员工信息
SELECT *
FROM employees
WHERE hire_date =
(
SELECT MIn(hire_date) as last_hire_date
FROM employees
)
-- 35.(count(*))查询90号部门的员工总人数
SELECT count(*) as '总人数'
FROM employees WHERE department_id = 90
-- 36.(count(*))查询90、100部门工资大于10000的员工总人数
SELECT count(*) as '总人数'
FROM employees WHERE department_id in (90,100) AND salary > 10000
-- 37.(avg(列名))查询员工表中员工的平均工资
SELECT AVG(salary)as '平均工资'
FROM employees
-- 38.(avg(列名))查询90、100部门工资大于10000的员工的平均工资
-- 思路:1.查询员工信息 2.根据部门id和工资做筛选3.查询平均工资
SELECT avg(salary) FROM employees WHERE department_id IN (90,100) AND salary >10000; GROUP BY department_id
-- 39.(sum(列名))查询员工表中员工工资总和
SELECT SUM(salary)as '员工工资总和'
FROM employees
-- 40.(sum(列名))查询80号部门员工工资总和
SELECT SUM(salary) FROM employees WHERE department_id =80 GROUP BY department_id ;
--
--