数据库练习

Posted 漂亮姐姐1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库练习相关的知识,希望对你有一定的参考价值。

联合查询

SELECT e.name,s.salary
FROM employee e -- employee 员工信息表
JOIN salaries s -- salaries 工资表
ON s.emp_no = e.emp_no -- emp_no 表示员工id

给成绩排序,分数相同排名并列

SELECT stu_id,score,DENSE_RANK() OVER(ORDER BY s.score) DESC rank
FROM scores -- scores 学生成绩表

获取工资第二多的员工id

SELECT emp_id
FROM salaries s
ORDER BYsalary DESC
LIMIT 1,1 -- 也即 LIMIT 1 OFFSET 1

查询迟到次数>=3次的学生的迟到次数

SELECT stu_id,sum(stu_id) AS times
FROM t_late
GROUP BY stu_id
HAVING times >= 3

获取员工其当前的薪水比其manager当前薪水还高的相关信息
地址:https://www.nowcoder.com/practice/f858d74a030e48da8e0f69e21be63bef

将姓和名用空格拼接起来

-- Sqlite
SELECT first_name||' '||last_name
FROM info -- 信息表
-- mysql
SELECT CONCAT(first_name,' ',last_name)
FROM info

批量插入数据,如果存在重复数据,忽略(不报错)

-- Sqlite
insert or ignore into info values
(1,'smartgiel',18),
(2,'zhangsan',3)
-- MySql
insert ignore into info values
(1,'smartgiel',18),
(2,'zhangsan',3)

从一个表获取数据放到另一个表

replace into table1(first_name,last_name) select first_name,last_name from table2
-- 用法类似 insert into, 可以如果是全部插入,可以不写字段
replace into table1 select first_name,last_name from table2

添加索引

-- Sqlite
--- 创建普通索引
CREATE INDEX index_name ON table_name(col_name)
--- 创建唯一索引
CREATE UNIQUE INDEX index_name ON table_name(col_name)
--- 创建全文索引
CREATE FULLTEXT INDEX index_name ON table_name(col_name)

-- MySql
--- 创建普通索引
ALTER TABLE info ADD INDEX idx_name(col_name)
--- 创建唯一索引
ALTER TABLE info ADD UNIQUE INDEX(col_name)
--- 创建主键索引
ALTER TABLE info ADD PRIMARY KEY (col_name)
--- 创建全文索引
ALTER TABLE info ADD FULLTEXT(col_name)

创建视图

CREATE VIEW v_stu_info AS
SELECT first_name,last_name
FROM stu_info -- 学生信息表

使用强制索引搜索数据

-- Sqlite
select *
from stu_info
indexed by idx_firstname  -- idx_firstname: first_name字段索引名
where id = 1
-- MySql
select *
from stu_info
force index(idx_firstname)
where id = 1

在last_name后增加列phone

ALTER TABLE stu_info ADD [COLUMN] phone VARCHAR(11) NOT NULL AFTER last_name

构造一个触发器:每插入一条迟到信息,更新scores表,使该学生score -10

CREATE TRIGGER punishment
AFTER INSERT ON late_for_class -- late_for_class :学生迟到信息表
FOR EACH ROW
UPDATE scores SET score = score - 10 WHERE stu_id = new.id and score > 0;

以上是关于数据库练习的主要内容,如果未能解决你的问题,请参考以下文章

cgb2109-day05

面向对象 —— 教师职工表练习

oracle强化练习题

Day 45 Mysql 数据库练习题二

数据库练习

数据库练习