1.基本查询:SELECT *FROM <表名>
2.条件查询:
not and or (优先级顺序)
<> 不相等
name LIKE 'ab%' 判断相似
WHERE score >= 60 AND score <= 90 = WHERE score BETWEEN 60 AND 90
3.投影查询:
SELECT * 查询表的所有列
SELECT 列1, 列2, 列3 FROM ... 让结果集仅包含指定列
SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM ... 给每列另外取别名
SELECT 列1, 列2, 列3 FROM ... WHERE......
4.排序:
ORDER BY (从低到高)
DESC(从高到低)
SELET id,name,gender,score FROM students ORDER BY score DESC,gender;
先按score 倒序,如果score相等,在按gender升序排列
默认是升序ASC,从小到大,ASC可以省略,ORDER BY score ASC 和 ORDER BY score 一样
如果有WHERE子句,那么ORDER BY子句要放到WHERE子句后面:
SELECT id, name, gender, score
FROM students
WHERE class_id = 1
ORDER BY score DESC;
5.分页查询:(f分页实际上就是从结果集中“截取”出第M~N条记录)
LIMIT M OFFSET N
LIMIT 3 OFFSET 0
可见,分页查询的关键在于,首先要确定每页需要显示的结果数量pageSize(这里是3),然后根据当前页的索引pageIndex(从1开始),确定LIMIT和OFFSET应该设定的值:
LIMIT总是设定为pageSize;
OFFSET计算公式为pageSize * (pageIndex - 1)。
这样就能正确查询出第N页的记录集。
可简写:
1.LIMIT 15 相当于 LIMIT 15 OFFSET 0
2.在MySQL中,LIMIT 15 OFFSET 30还可以简写成LIMIT 30, 15。
3.分页查询需要先确定每页的数量和当前页数,然后确定LIMIT和OFFSET的值
6.聚合查询:
查询表中一共有多少条记录,用COUNT()查询
SELECT COUNT() FROM students;
每页3条记录,如何通过聚合查询获得总页数:
SELECT CEILING(COUNT() / 3) FROM students;
分组聚合:GROUP BY
SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;
7.多表查询
a.SELECT查询不但可以从一张表查询数据,还可以从多张表同时查询数据。查询多张表的语法是:SELECT * FROM <表1> <表2>
SELECT * FROM students, classes 两个表行数乘积,列数之和
b.FROM子句给表设置别名的语法是FROM <表名1> <别名1>, <表名2> <别名2>。这样我们用别名s和c分别表示students表和classes表
SELECT
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cname
FROM students s, classes c;
同时满足条件s.gender = 'M'和c.id = 1
SELECT
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cname
FROM students s, classes c
WHERE s.gender = 'M' AND c.id = 1;
A.使用多表查询可以获取M x N行记录;
B.多表查询的结果集可能非常巨大,要小心使用
8.连接查询:
A.SELECT s.id ,s.name,s.class_id,c.name class_name,s.gender,s.score FROM students s INNER JOIN classes c ON s.class_id =c.id
B.INNER JOIN 返回同时存在于两张表的行数据
RIGHT OUTER JOIN 返回右表都存在的行
LEFT OUTER JOIN 返回左表都存在的行
FULL OUTER JOIN 两张表所有记录全部选择出来,并且,自动把对方不存在的列填充为NULL
SELECT....FROM tableA ??? JOIN tableB ON tableA.column1 = tableB.column2
修改数据:
1.添加一条记录
INSERT INTO <表名>(字段1,字段2,。。。)VALUES(值1,值2.。。。);
2.添加二条记录
INSERT INTO<表名>(字段1,字段2,。。。)VALUES(值1,值2.。。。),(值1,值2.。。。);
3.更新数据库表中的记录
UPDATE <表名> SET 字段1=值1,字段2=值2,.......WHERE .......;
例如:UPDATE students SET name='大牛', score=66 WHERE id=1;
4.一次更新N条记录
UPDATE <表名> SET 字段1=值1,字段2=值2,.......WHERE id >=XX AND id<=XXX;
5.UPDATE可以用表达式:
UPDATE students SET score=score+10 WHERE score<80;
6.更新整个表所有的记录:
UPDATE students SET score=60;
删除数据库表中的记录(DELETE)
DELETE FROM students WHERE id =1;
一次删除多条记录
DELETE FROM students WHERE id>=5 AND id<=7;
删除整个表的所有的记录
DELETE FROM students;
网友评论