1.增加数据:
全列插入:值的顺序与表中字段的顺序一致
-  
insert into 表名 values(...) 
部分列插入:值的顺序与给定的列顺序对应
-  
insert into 表名 (列1,...)values(值1,...) -  
insert into class values(1,'math',85.2); -  
insert into class (class_id ,class_name ,class_num) values(2,'PE',60.22); 
2.修改:
- 语法:update 表名 set 字段名=值 ,字段名=值 where 条件;
 -  
update students set gender=0,hometown='太原' where id=9; 
3.删除:
- delete from 表名 where 条件;
 
重点
查询:
查询的基本语法: select *(字段名) from 表名;  
 
一.
1.SELECT 特殊标识 数字和日期使用的数学表达式
| 操作符 | 描述 | 
| + | 加 | 
| - | 减 | 
| * | 乘 | 
| / | 除 | 
操作符优先级: 乘除的优先级高于加减 同一优先级运算符从左向右执行 括号内的运算先执行
select (sno +2)*2 from score; 
mysql> select * from Student;
+--------+----------+-------------+------+------------+
| stu_id | stu_name | phone       | sex  | birthday   |
+--------+----------+-------------+------+------------+
|      1 | asd     | 1564896322 | 男   | 2022-03-08 |
|      1 | shiwei   | 1564679877 | 男   | 2000-09-28 |
+--------+----------+-------------+------+------------+
2 rows in set (0.00 sec)
mysql> select stu_id+2 from Student;
+----------+
| stu_id+2 |
+----------+
|        3 |
|        3 |
+----------+
2 rows in set (0.32 sec)
mysql> select * from Student;
+--------+----------+-------------+------+------------+
| stu_id | stu_name | phone       | sex  | birthday   |
+--------+----------+-------------+------+------------+
|      1 | asd      |1564896322 | 男   | 2022-03-08 |
|      1 | shiwei   |  1564679877 | 男   | 2000-09-28 |
+--------+----------+-------------+------+------------+
2 rows in set (0.00 sec)
 
2.列的别名:
列名 AS 别名 :ac_id AS a
别名=列 :select sno = 'te_id' from student;
3..连接符
 把列与列,列与字符连接在一起 用concat(字段1,字段2) orcale数据库可使用 || select
 concat(sname,ssex) from student;
mysql> select concat(stu_id,stu_name)from Student;
+-------------------------+
| concat(stu_id,stu_name) |
+-------------------------+
| 1asd                  |
| 1shiwei                 |
+-------------------------+
2 rows in set (0.09 sec)
 
4.数据排重
select distinct 字段 from 表名;
mysql> select distinct stu_id from Student;
+--------+
| stu_id |
+--------+
|      1 |
+--------+
1 row in set (0.11 sec) 
 
二.
1.数据过滤
- 使用WHERE 子句,对行数据进行限制,将不满足where条件的行过滤掉。
 - select *from student where sno>105;
 -  
mysql> select * from Student where stu_name='shiwei'; +--------+----------+-------------+------+------------+ | stu_id | stu_name | phone | sex | birthday | +--------+----------+-------------+------+------------+ | 1 | shiwei | 18234243849 | 男 | 2000-09-28 | +--------+----------+-------------+------+------------+ 1 row in set (0.16 sec) - WHERE子句中,字符和日期要包含在单引号中。
 
2.比较运算
| 操作符 | 含义 | 
| = | = | 
| > | 大于 | 
| >= | 大于等于 | 
| < | 小于 | 
| <= | 小于等于 | 
| < > | 不等于 | 
| between...and.. | 在两个值之间 | 
| in | 等于值列表中的一个 | 
| like | 模糊查询 | 
| is null | 空值 | 
注意点:
- BETWEEN a AND b表达一个闭区间 [a,b]
 -  
select * from student where sno between 101 and 105; - IN运算显示列表中规定的值
 -  
select * from student where sno in(1,103,108); --顺序不同,效率不同,尽量把出现概率高的放前 面 - LIKE 运算选择类似的值 选择条件可以包含字符或数字 %代表一个或多个字符 _代表一个字符
 - ‘%’和‘-’可以同时使用
 
3.逻辑运算
| 操作符 | 含义 | 
| and | 逻辑并 | 
| or | 逻辑或 | 
| not | 逻辑否 | 
and: select * from student where sno>=108 and ssex="man"; 
4.优先级
- 1 算术运算符(+ - * /)
 - 2连接符(“||"将不同列的数据合为一列)CONCAT
 - 3 比较符 (< > =)
 - 4 IS [NOT] NULL, LIKE, [NOT] IN
 - 5 [NOT] BETWEEN
 - 6 NOT
 - 7 AND
 - 8 OR
 
5.常用数学函数:
count(*) 
avg() 平均值 
sum() 求和 
三.数据排序
1.单个列排序 ORDER BY 排序标准(字段) 排序方式;
ORDER BY 子句在SELECT语句的结尾
排列的方式:ASC 升序,DESC 降序
select * from 表名 order by 字段; 
代码:
select * from mdm ORDER BY ac_id desc; 
2.多个列排序 ORDER BY 排序标准 1 排序方式,排序标准 2 排序方式
先按第一个条件排,第一个相同再按第二个排。
select * from mdm ORDER BY ac_id ASC,ac_no desc; 
 
3.按别名排序
select ac_id,ac_id *2 test from mdm_ac_rel order by test; 
四.子查询
- 子查询是一个 SELECT 查询
 - 其作用是把返回值嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。
 - 任何允许使用表达式的地方都可以使用子查询。
 - 语法:SELECT 字段FROM 表名 WHERE 字段 +运算符 (select 字段 from 表名 where 条件)
 
注意:
- 子查询在主查询之前执行完成。 子查询的结果被主查询使用。
 - 子查询要包含在括号里面。 将子查询要放在比较条件的右边 单行操作符对应单行子查询,多行操作符对应多行子查询
 - 子查询按照查询的返回结果可分为单行子查询和多行子查询; 两者的区别就是单行子查询每次只返回一行数据,而多行子查询每次返回多行数据;
 
- 例子 
select * from student where sno = (select ac_id from mdm_ac_rel where ac_id=1);
- 多行子查询:返回多行操作符
 - 含义 IN 等于列表中的任何一个 ANY 和子查询返回的任意一个值比较 ALL 和子查询返回的所有值比较
 
 
- IN 等于列表中的任何一个
 - ANY 和子查询返回的任意一个值比较
 - ALL 和子查询返回的所有值比较
 
select * from mdm_ac_rel where ac_id in (select sno from student); 
select * from mdm_ac_rel where ac_id >any (select sno from student); 
select * from mdm_ac_rel where ac_id >all (select sno from student where sno=1); 
五.多表查询
- 目的是从多个表中查询到数据。
 - 当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回
 
区分重复的列名:
elect a.ac_no,b.bal from mdm a ,dd_mst b where a.ac_id=b.ac_id;  
- (1)使用表名前缀在多个表中区分相同的列。
 - (2)使用表名可以提高效率。
 - (3)在不同表中具有相同列名的列可以用别名加以区分。 为了连接n个表,至少需要n-1个连接条件 1.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值
 - 例如: 
a.ac_id= b.ac_id 
2. 内连接:
- 两个表(或连接)中某一数据项相等的连接称为内连接。
 - 等值连接一般用where字句设置条件,
 - 内连接一般用on字句设置条件,但内连接与等值连接效果是相同的。
 - 语法格式: SELECT 显示的字段 from 表名1 inner join 表名2 on 连接条件
 - 简写形式:SELECT 显示的字段 from 表名1 ,表名2 where 连接条件
 
3.非等值连接: 连接运算符包括:>、>=、<=、<、!>、!<和<>
4.外连接:
- 使用外连接可以查询不满足连接条件的数据。
 - 外链接的结果集等于内链接的结果集加匹配不上的记录(一个也不能少)
 - *外连接的符号是 (+)。把(+)对面表的数据全部匹配出来; *传统的外连接分为左外连接和右外连接两种。
 - 两个表在连接过程中除返回满足连接条件的行为外,还返回左表中不满足条件的行为,这种连接称为左外连接. 两个表在连接过程中除返回满足连接条件的行为外,还返回右表中不满足条件的行为,这种连接称为右外连接.
 
5.自然连接:
是一种特殊的等值连接,他要求多个表有相同的属性字段,然后条件为相同的属性字段值相等,最后再将表中重复的属性字段去掉,即为自然连接。











