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.自然连接:
是一种特殊的等值连接,他要求多个表有相同的属性字段,然后条件为相同的属性字段值相等,最后再将表中重复的属性字段去掉,即为自然连接。