资料来源:【数据库】SQL 3小时快速入门
文章目录
一、SQL简介
1、定义
SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server 等
2、对比
软件 | 优点 | 缺点 |
---|---|---|
Excel | 简单灵活,适合展示 | 处理数据量少 |
SQL | 处理数据量极大,面向程序 | 需要使用SQL语言 |
二、MySQL安装
1、官网
2、Windows版本下载
3、自定义配置
- 左侧选择最新版本server、workbench和shell,分别点击右箭头选择下载项目
- 如果左侧框内为空,则C盘已经安装该软件,可以在路径C:\ProgramData\MySQL中查看情况,不知所措就全部删除重新安装
- 执行下载
- 执行安装
- 接下来全部Next……
- 设置密码,简单好记就行
- 全部Next最终Finish……
三、MySQL使用
1、MySQL Workbench
2、基础语法
功能 | 语法 |
---|---|
创建数据库 | CREATE DATABASE sql_tutorial; |
删除数据库 | DROP DATABASE sql_tutorial; |
显示数据库 | SHOW DATABASES; |
使用数据库 | USE sql_tutorial; |
数据格式/整数型 | IN |
数据格式/小数型 | DECIMAL(m,n) |
数据格式/字符串 | VARCHAR(n) |
数据格式/年月日 | DATE |
数据格式/时间戳 | TIMESTAMP |
创建表格 | CREATE TABLE sql_table(id INT PRIMARY KEY, name VARCHAR(10)); |
显示表格 | DESCRIBE sql_table; |
删除表格 | DROP TABLE sql_table; |
增加条目 | ALTER TABLE sql_table ADD goal DECIMAL(4,2); |
删除条目 | ALTER TABLE sql_table DROP COLUMN goal; |
储存数据 | INSERT INTO sql_table VALUES (); |
查询数据 | SELECT * FROM sql_table; |
更新数据 | UPDATE sql_table; |
删除数据 | DELETE FROM sql_table; |
设置数据 | SET id = n; |
设置条件 | WHERE id = n; |
设置条件 | WHERE id IN(‘123’, ‘124’) |
升序(默认) | ORDER BY name(ASC); |
降序(手动) | ORDER BY name DESC; |
限制数量 | LIMIT n; |
去重 | SELECT DISTINCT name FROM employee; |
且 | AND |
或 | OR |
3、练习
- 创建数据库
CREATE DATABASE sql_tutorial;
SHOW DATABASES;
USE sql_tutorial;
- 创建公司资料库表格
CREATE TABLE employee(
emp_id INT PRIMARY KEY,
name VARCHAR(20),
birth_date DATE,
gender VARCHAR(1),
salary INT,
branch_id INT,
sup_id INT
);
DESCRIBE employee;
CREATE TABLE branch(
branch_id INT PRIMARY KEY,
branch_name VARCHAR(20),
manager_id INT,
FOREIGN KEY(manager_id) REFERENCES employee(emp_id) ON DELETE SET NULL
);
CREATE TABLE client(
client_id INT PRIMARY KEY,
client_name VARCHAR(20),
phone VARCHAR(20)
);
CREATE TABLE works_with(
emp_id INT,
client_id INT,
total_sales INT,
PRIMARY KEY (emp_id, client_id), //多个主键必须另外配置,否则报错
FOREIGN KEY (emp_id) REFERENCES employee(emp_id) ON DELETE CASCADE,
FOREIGN KEY (client_id) REFERENCES client(client_id) ON DELETE CASCADE
);
- 使用INSERT INTO插入数据
- 关联表格外键
ALTER TABLE employee
ADD FOREIGN KEY(branch_id)
REFERENCES branch(branch_id)
ON DELETE SET NULL;
ALTER TABLE employee
ADD FOREIGN KEY(sup_id)
REFERENCES employee(emp_id)
ON DELETE SET NULL;
4、进阶语法
(1)聚合函数
功能 | 语法 |
---|---|
取得计数 | SELECT COUNT(*) FROM employee; |
取平均数 | SELECT AVG(salary) FROM employee; |
取合计数 | SELECT SUM(salary) FROM employee; |
取最大值 | SELECT MAX(salary) FROM employee; |
取最小值 | SELECT MIN(salary) FROM employee; |
- 通配符
通配符 | 描述 |
---|---|
% | 代替n 个字符 |
_ | 代替1 个字符 |
// 选出所有12月生日的员工,生日格式1990-12-12
SELECT *
FROM employee
WHERE birth_date LIKE ‘_____12%’;
(2)联表查询
- UNION
语法 | 描述 |
---|---|
UNION | 对两个结果集进行并集操作 ,不包括重复行 ,按默认规则排序 |
UNION ALL | 对两个结果集进行并集操作,包括重复行 ,不对结果进行排序 |
SELECT name AS total_name // AS手动修改列名,否则默认第一个SELECT的列名
FROM employee
UNION
SELECT client_name
FROM client;
- JOIN
语法 | 描述 |
---|---|
[INNER ]JOIN | 如果表中有至少一个匹配,则返回行 |
LEFT JOIN | 即使右表中没有匹配,也从左表返回所有的行 |
RIGHT JOIN | 即使左表中没有匹配,也从右表返回所有的行 |
FULL JOIN | 只要其中一个表中存在匹配,则返回行 |
// 获取员工业绩和编号名字
SELECT emp_id, name
FROM employee
JOIN
SELECT total_sales FROM works_with
ON employee.emp_id = works_with.emp_id
(3)外键约束
定义:当删除或更新操作时发出外键约束
ON DELETE | 描述 |
---|---|
cascade | 在父表(外键来源表)中删除对应记录时,检查是否有对应外键,如有则删除外键在子表(含外键的表)的记录 |
set null | 在父表中删除对应记录时,检查是否有对应外键,如有则设该外键值为null(该外键允许取null) |
restrict | 在父表中删除对应记录时,检查是否有对应外键,如有不能删除 |
no action | 同restrict,如果存在从数据,不能删除主数据 |
ON UPDATE | 描述 |
---|---|
cascade | 在父表(外键来源表)中删除对应记录时,检查是否有对应外键,如有则更新外键在子表(含外键的表)的记录 |
set null | 在父表中更新对应记录时,检查是否有对应外键,如有则设该外键值为null(该外键允许取null) |
restrict | 在父表中更新对应记录时,检查是否有对应外键,如有不能更新 |
no action | 同restrict,如果存在从数据,不能更新主数据 |
个别情况下,NO ACTION在其他约束动作后执行,RESTRICT具有最高优先执行权
(4)数学运算
功能 | 语法 |
---|---|
最小整数 | select ceil(2.9) ⇒ 2 |
最大整数 | select floor(2.1) ⇒ 3 |
小数取位 | select round(1.234, 2) ⇒ 1.23 |
正负判断 | select sign(a - b) |
随机数 | select rand() |
绝对值 | select abs(a - b) |
(5)字符串运算
功能 | 语法 |
---|---|
替换 | select replace("aAaAaA", "A", "a") ⇒ “aaaaaa” |
合并 | select conact("大", "头") ⇒ “大头” |
匹配 | where name like “_冀%” |
左截取 | select left("12345", 2) ⇒ “12” |
右截取 | select right("12345", 2) ⇒ “45” |
中截取 | select substring("12345", 3, 3) ⇒ “345” |
计数 | select char_length("sql") ⇒ 3 |
空格 | select trim(" he ll o ") ⇒ “hello” |
重复 | select repeat ("sql", 3) ⇒ “sqlsqlsql” |