Table Creation and Data Manipulation

 Table Creation and Data Manipulation

 1. Insert code


​​​​​​​-- 插入学生信息
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. Update data code

-- 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. Basic query statement

-- 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 ;

-- 
-- 

Guess you like

Origin blog.csdn.net/weixin_41957626/article/details/131445252