花俩小时简单过了一下SQL基础知识,记下来方便以后回看
两个数据表:employees,departments
表的关联关系:
有三种SQL表关联方式:内连接、外连接和交叉连接。内连接仅返回两个表中匹配的行,而外连接返回两个表中所有的行以及匹配的行。交叉连接不需要任何条件,它返回两个表中所有可能的组合。
1、去重
SELECT DISTINCT department_id,salary
FROM employees;
2、列的别名
SELECT employee_id emp_id,last_name AS lname,salary "工资"
FROM employees;
(列的旧名字和新名字之间可以用空格,也可以用AS,也可以用双引号)
3、排序
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary;
(ORDER BY 放在 FROM 之后,默认是升序ASC)
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary DESC;
(ORDER BY 放在 FROM 之后,这个是降序DESC)
4、分页
SELECT employee_id,last_name
FROM employees
LIMIT 0,20;
(从第0条记录开始,往后偏移20条记录 | 或者理解为每页20条记录)
【声明顺序:WHERE,ORDER BY,LIMIT】
5、修改字段类型
ALTER TABLE employees
MODIFY salary INT;
(若一个字段将来参与计算,推荐使用整数、浮点数、定点数类型;若只用来显示,可以使用VARCHAR(255)类型)
6、多表查询
关键点:多表查询要有连接条件
SELECT employee_id,department_name
FROM employees,departments
WHERE employees.`department_id` = departments.`department_id`;【这句话就是连接条件!!】
如果查询语句中出现了多个表中都存在的字段,则必须指明此字段所在的表
SELECT employee_id,department_name,employees.department_id
FROM employees,departments
WHERE employees.`department_id` = departments.`department_id`;
7、聚合函数
AVG / SUM:
SELECT AVG(salary),SUM(salary)
FROM employees;
MAX / MIN:
SELECT MAX(salary),MIN(salary)
FROM employees;
8、子查询
9、主键约束
含有主键约束的字段,该字段能够唯一的表示此数据表。该字段的记录不能为NULL,也不能出现重复值。
主键约束的定义方式有三种:
- 单个字段的主键:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(30),
age INT
);
- 复合主键:
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
PRIMARY KEY (column1, column2)
);
- 另外,对于已经创建过的表,使用ALTER TABLE添加主键:
ALTER TABLE table_name ADD PRIMARY KEY (column1);
10、自动增长
为什么会有自动增长的存在呢?
在为数据表设置主键约束之后,每次插入时,都要检查主键字段的记录是否重复而导致插入失败,这会给数据库的使用带来很多麻烦。因此自动增长应运而生。
对于可以自动增长的字段,一定是INT型字段,并且该字段得定义为键(UNIQUE KEY、PRIMARY KEY)
- 基本语法格式:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30),
age INT
);
- 另外,对于已经创建过的表,使用ALTER TABLE添加自动增长
ALTER TABLE users MODIFY id INT AUTO_INCREMENT;
11、日期和时间的数据类型
数据库中表示时间和日期的数据类型有:YEAR,DATE,TIME,DATETIME,TIMESTRAP。共5种。
- YEAR类型
CREATE TABLE my_year(y YEAR);#设置y字段的数据类型为YEAR类型
INSERT INTO my_year VALUES(2020);#插入年份数据,2020年
也可以这样:
CREATE TABLE my_year(y YEAR);#设置y字段的数据类型为YEAR类型
INSERT INTO my_year VALUES('2020');#插入年份数据,2020年
- DATE类型
DATE类型表示日期值,不包含时间
CREATE TABLE my_date(d,DATE);#设置d字段的数据类型为DATE类型
INSERT INTO my_date VALUES('2020-01-21');#插入年份数据,2020年1月21日
也可以:
CREATE TABLE my_date(d,DATE);#设置d字段的数据类型为DATE类型
INSERT INTO my_date VALUES(2020-01-21);#插入年份数据,2020年1月21日
也可以:
CREATE TABLE my_date(d,DATE);#设置d字段的数据类型为DATE类型
INSERT INTO my_date VALUES('20200121');#插入年份数据,2020年1月21日
也可以:
CREATE TABLE my_date(d,DATE);#设置d字段的数据类型为DATE类型
INSERT INTO my_date VALUES(20200121);#插入年份数据,2020年1月21日
12、DELETE与UPDATE
UPDATE 和 DELETE 用于修改数据库中已有的数据。