查询sql
对于这类sql会有很多组合操作,我们需要分别哪些代码是一组,这个方法就是看那些代码在一起操作会生成一个集合。
select count(id) num,class_id from students group by class_id;
students group by class_id 这里将Students分成了三类:class1,class2,class3;所以上述sql等价于
--假如有三个班级
select count(id) num,class_id from students where class_id = 1;
select count(id) num,class_id from students where class_id = 2;
select count(id) num,class_id from students where class_id = 3;
投影查询
使用SELECT 列1, 列2, 列3 FROM ...时,还可以给每一列起个别名,这样,结果集的列名就可以与原表的列名不同。它的语法是SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM ...。
连接查询
内连接
INNER JOIN查询的写法是:
- 先确定主表,仍然使用FROM <表1>的语法;
- 再确定需要连接的表,使用INNER JOIN <表2>的语法;
- 然后确定连接条件,使用ON <条件...>;
- 可选:加上WHERE子句、ORDER BY等子句;
现在我需要查所有学生的信息,并且还要加上他们的班级名,但是学生表里只有班级id,所以需要连接class表找到班级名。
select s.id ,s.name,s.gender,s.score,c.name class_name
from students s inner join class c
on s.class_id = c.class_id;
在这里我们就可以将from students s inner join class c 当做一个表。
外连接
如果将上面的上面的连接改为外连接的话
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
RIGHT OUTER JOIN classes c
ON s.class_id = c.id;
结果会比上面的多一行
这行就是在class表中有但在students表中没有的。
修改sql
insert
insert的基本语法是:
INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);
例子
INSERT INTO students (class_id, name, gender, score) VALUES
(1, '大宝', 'M', 87),
(2, '二宝', 'M', 81),
(3, '三宝', 'M', 83);
update
基本语法
UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;
例子
UPDATE students SET name='大宝' WHERE id=1;
一定要注意update一定要加上where,如果不加它会将整个表都修改了
delete
基本语法
DELETE FROM <表名> WHERE ...;
例子
DELETE FROM students WHERE id=1;
要特别小心的是,和UPDATE类似,不带WHERE条件的DELETE语句会删除整个表的数据: