进度1:32:06

一.数据类型

1
2
3
4
5
6
INT                    --整数
DECIMAL(3,2) --有小数点的数
VARCHAR(10) --字串
BLOB --(Binary Large Object) 图片 影片 档案...
DATA --'YYYY-MM-DD' 日期
TIMESTAMP --'YYYY-MM-DD HH:MM:SS' 记录时间

二.简单例子

例一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
CREATE dATABASE `sql_tutorial`;
SHOW DAtABaSES;
USE `sql_tutorial`;
CREATE TABLE `student`(
`student_id` INT PRIMARY KEY auto_increment,
`name` VARCHAR(20) NOT NULL , -- 这是一个注释,记得是减减加空格
`major` VARCHAR(20) default '历史',
`score` INT default 100 -- 最后一个属性不用加逗号
); /*最后有;相当于一句话的结束?*/

dESCriBe `student`;
drop TABLE `student`;/*比如你建表规则改变的时候(什么是建表规则改变,目前还不知道),就要先drop,再重新create*/
ALTER TABLE `student` ADD gpa DECIMAL(3,2) default 0.00; -- 新增属性
ALTER TABLE `student` DROP COLUMN gpa; -- 删除属性

SELECT * FROM `student`;-- 查看student表内所有数据
INSERT INTO `student` VALUES(1,'小白','历史',100); -- 插入数据,注意是用单引号’而不是`
INSERT INTO `student` VALUES(2,'小绿',NULL,80);
INSERT INTO `student`(`name`,`major`,`student_id`) VALUES('小蓝','英语',3);
INSERT INTO `student`(`name`,`student_id`) VALUES('小红',4);
INSERT INTO `student`(`name`,`major`) VALUES('小红',NULL); -- 不写id是因为auto_increment自动生成id
DELETE FROM `student` WHERE `student_id` = 4; -- 删除id为4的那一行


SET SQL_SAFE_UPDATES=0 ;-- 用于关闭安全更新模式,允许你执行 UPDATE 或 DELETE 语句,即使没有 WHERE 条件或没有主键索引。
UPDATE `student`
SET `major` ='英语文学' -- 不是行列名等,要使用''
WHERE `major` ='英语' ;
UPDATE `student` SET `name`='小1' WHERE `name`='小绿' or `name`= '小白'; -- 更新表格
UPDATE `student` SET `name`='小灰',`major`='物理' WHERE `student_id`=1;
UPDATE `student` SET `major`='物理';
delete from `student` where `name`='小灰' and `major`='物理'; -- where用and连接
delete from `student` where `score`<60;
delete from `student` ;-- 把student内数据全部删除
-- 取得资料
select * from `student`;
Select `name` from `student` ;
select `name` , `major` from `student`; -- 中间用,而不是and
SELECT * from `student` order by `score` ; -- 从低到高,或者在order by后面加上ASC
selecT * from `student` order by `score` DESC;-- 从高到低
select * from `student` order by `score`DESC,`student_id` Limit 3; -- 先根据score降序排序,若是score一样,则按student_id升序排序,只返回前三个
select * from `student` where `major`='英语' and `student_id`=1; -- where用and连接
SELeCt * from `student` where `major`in('历史','英语','生物');/*等于 select * from `student` where `major`='历史'or `major`='英语'or `major`='生物'*/

Tips

1.注释有– 和/**/两种–后面要跟空格

2.一个引号是一句,比如虽然CREATE TABLE student 有那么多行,其实只有一句,所以cursor指向容易一行就可以执行整个语句

3.闪电只会闪电一句话,比如你没有执行USE sql_tutorial 这一句话,去执行dESCriBe student;就会报错,记住一定要先执行USE sql_tutorial这句话

4.关键字的大小写是无所谓的,但建议关键字全用大写,上面例子只是为了体现大小写任意的特征,实际上一个全部大写,自己定义的字建议使用``包括起来,并使用小写

5.>大于 <小于 >=大于等于 =等于 <>不等于

6.where用and,or连接?

例二

1
2
3
4
-- 取得薪水前3名的员工
SELECT * FROM `employee` ORDER BY `SALARY` DESC LIMIT 3;
-- 取得所有员工的名字且不重复
SELECT DISTINCT `name` FROM `employee`;

例三(aggregate functions聚合函数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 1.取得员工人数
SELECT COUNT(*) FROM `employee`;
-- 2.取得sup_id非空的员工人数
SELECT COUNT(`sup_id`) FROM `employee`;
-- 3.取得所有生于1970-01-01之后的女性员工人数
SELECT COUNT(*) FROM `employee` WHERE `birth_date` >`1970-01-01` AND `sex`=`F`;
-- 4.取得所有员工的平均薪水
SELECT AVG(`salary`) FROM `employee`;
-- 5.取得所有员工薪水的总和
SELECT SUM(`salary`) FROM `employee`;
-- 6.取得薪水的最高的员工
SELECT MAX(`salary`) FROM `employee`;
-- 7.取得薪水最低的员工
SELECT MIN(`salary`) FROM `employee`;

例四(wildcards万用字元)

1
2
3
4
5
6
7
8
9
10
11
-- %代表多个字元,_代表一个字元
-- 1.取得电话号码尾数为335的客户
SELECT * FROM `client` WHERE `phone` LIKE '%335';
-- 2.取得电话号码开头为685的客户
SELECT * FROM `client` WHERE `phone` LIKE '685%';
-- 3.取得电话号码包含926的客户
SELECT * FROM `client` WHERE `phone` LIKE '%926%';
-- 4.取得性艾的客户
SELECT * FROM `client` WHERE `client_name` LIKE '艾%';
-- 5.取得生日在9月的员工
SELECT * FROM `client` WHERE `birth_data` LIKE '_____09%';

例五(union联集)

1
2
3
4
5
6
-- 1.员工名字union客户名字
SELECT `name` FROM `employee` UNION SELECT `client_name` FROM `client`;
-- 2.员工id+员工名字 union 客户id+id名字,AS`xx`用来自定义列名,也可以不加
SELECT `emp_id` AS `total_id`,`name` AS `total_name` FROM `employee` UNION SELECT `client_id`,`client_name` FROM `client`;
-- 3.员工薪水 union 销售金额
SELECT `salary` FROM `employee` UNION SELECT `total_sales` FROM `work_with`;

例六(join连接)

join帮助将两个表格连接在一起 (还是直接看2:19:00吧,写不清楚)

例七(subquery子查询)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 1.找出研发部门经理的名字
select `name`
FROM `employee`
WHERE `emp_id`=(
SELECT `manager_id` FROM `branch` WHERE `branch_name`=`研发`;
);
-- 2.找出对单一位客户销售金额超过50000的员工名字
SELECT `name`
FROM `employee`
WHERE `emp_id` IN(
SELECT `emp_id`
FROM `work_with`
WHERE `total_sales` >50000
);

例八(on delete)

  • ON DELETE SET NULL
  • ON DELETE CASCADE