对表的数据的增删查改
(前言,一般来说sql语句中的关键字需要大写,这样比较规范,但是我为了好认用了小写)
(因为mysql是不区分大小写的,所以全部小写也是会执行的)
向表中增加数据
insert into table_name (列1名,列2名,列3名,....)
values("列1值","列2值","列3值",.....);
需要注意的是有时我们并不需要特别的写出列名,因为我们已经知道有哪些列,有几列,所以 我们可以直接写出values;
而且对于自动递增的列我们可以使用null来代替它,这样在数据书中该行中该列的值会自动输入上一行该列的值加一;但是我们不能用空字符串来代替它,这样会报错,因为他们的数据类型是不同的。如图所示:
insert into ordered values("21","93-12-12",1); insert into ordered values(null,"93-12-14",2); insert into ordered values("","93-12-15",3);
首先第一列是自动递增的,然后输入以上三个语句,
第一句结果为:
第二行结果为:
第三行结果为:
21:22:43 insert into ordered values("","93-12-15",3) Error Code: 1366. Incorrect integer value: '' for column 'o_num' at row 1 0.000 sec
查询表中数据
select 所查询的字段 from table_name where 限制语句 [group by 字段] [having <>] [order by 列名 desc或] [limit 限制查询结果行数]
上面的语句where 和后面的限制语句都是可选的,接下来我们一一说明他们的用法。
首先是查询全表
select *from table_name; *符号是一种通配符 代表所有字段。
查询表中的几个列
select 列名,列名,... from table_name; 列名即字段名,查询表中的指定字段,字段名可多个也可以一个。
查询时使用where限制条件
select 列名,... from table_name where 限制条件;
关于限制条件的几种方式可以点击这里查看。
查询不重复的结果
select distinct 列名,... from table_name;
对查询结果进行排序 根据order by 后面的列排序
select 列名,... from table_name order by 列名 [desc or asc];
desc示从上到下是降序,asc表示升序,默认是升序排列。
将查询结果按列名分组
select 列名,... from table_name group by 列名;
通常 group by语句是配合sql函数一起使用的,关于函数问题我们以后再细说
查询分组过后的使用添加的限制条件
select 列名,... from table_name group by 列名 having 限制条件 ;
该条语句通常也需要搭配sql函数使用。
group by后添加with rollup关键字
select 列名,... from table_name group by 列名 with rollup;
该关键字可以是查询结果多出一行 这一行来表示查询记录的总和。
根据多字段分组
select 列名,... from table_name group by 列名,列名,...;
这个时候会先按第一个列名进行分组,然后在第一个列名值相同的情况下按第二个列名分组,第三个依次类推,
限制查询结果的条数
select 列名,... from table_name limit[n,m];
n的值是查询结果的位置偏移量(当前行数-第一行的值),即如果要从第一行开始显示,n=0 (ps:1-1);从 第二行,n=1,(ps:2-1);第三行的话 n=2,(ps:3-1).
m的值是指定返回的查询结果条数(这个应该很好理解)
多表查询
一般来说,多表查询需要多个表中有相同意义的字段,字段名字可能不同
连接查询:⑴ 内连接查询
select 字段1,字段2,字段3,字段4 from 表1 inner join 表2 on 表1.相同意义字段名=表2.相同意义字段名 ;
其中字段1234可能分别属于表1表2, 其实这个语句还有另外一种写法。
select 字段1,字段2,字段3,字段4 from 表1,表2 where 表1.相同意义字段名=表2.相同意义字段名;
而为什么不用第二种写法是因为第一种写法可以明确指出连接条件,而且where子句在有些时候影响查询条件。
⑵外连接查询
外连接又分为左连接和右连接,
左连接:返回左表中全部记录和右表中连接字段相等的记录,
比如 user1表这样 user2表这样
执行完左连接语句:select user1.a,b,c from user1 left outer join user2 on user1.a=user2.a;
结果是这样
也就是说左外连接会将右表的数据根据user1.a=user2.a匹配插入到左表中,若左表一行中有数据而右表没有,则该数据用null代替。
而右外连接则是这个语句,
select user1.a,b,c from user1 right outer join user2 on user1.a=user2.a;
结果为
因为查询的字段是user1.a所以结果中a字段的第4行为null,右外连接就是左外连接的反过来。