SQL 学习笔记<二> INSERT, UPDATE, DELETE, SELECT

INSERT INTO <表名>[(<属性列1>[, <属性列2>…])] VALUES(<常量1>[, <常量2>…]);

INSERT INTO Student(Sno, Sname, Ssex, Sdept, Sage) VALUES('2000232', 'Jeff', 'male', 'computer', 20);

UPDATE <表名> SET <列名>=<表达式>[, <列名>=<表达式>]… [WHERE <条件>];

UPDATE Student SET Sage=18 WHERE Sno='2000232';

DDLETE FROM <表名> [WHERE <条件>];

DELETE FROM Student WHERE Sno='2000232';

DELETE FROM Student; //删除表SC中所有的数据,使之变成一张空表

SELECT [ALL|DISTINCT] <目标列表达式>[, <目标列表达式>] …

FROM <表名或视图名>[, 表名或视图名]  …

[WHERE <条件表达式>]

[GROUP BY <列名1> [HAVING <条件表达式>]] //GROUP将结果关系按列名1的值进行分组,如果带HAVING短语,则只有满足指定条件的组才予以输出

[ORDER BY <列名2> [ASC|DESC]]; //ORDER将结果按列名2进行升序或者降序排列

SELECT Sno, Sname FROM Student;

SELECT * FROM Student;

SELECT Sname, 2011 – Sage FROM Student;

SELECT Sname, 2011 – Sage AS BirthYear FROM Student;

SELECT Sno, Cno, 'Passed' Flag FROM SC WHERE Grade >=60; //查询出来的数据里面第3列是一个字符串常数,并且常数的值是'Passed'

SELECT ALL Sno FROM SC;// ALL用于查询出所有的数据

SELECT DISTINCT Sno FROM SC; //DISTINCT 用于去掉重复的数据

WHERE:

查询条件 谓词 例子
比较 =, >, <, >=, <=, <> SELECT Sname, Sage FROM Student WHERE Sage < 20;
确定范围 BETWEEN AND, NOT BETWEEN AND SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 18 AND 20;
确定集合 IN, NOT IN SELECT Sname, Sage FROM Student WHERE Sdept IN('Computer', 'Management');
字符匹配 LIKE, NOT LIKE SELECT Sname, Sno, Ssex FROM Student WHERE Cname LIKE '王%'; //%表示匹配任意长度字符
SELECT Sname, Sno, Ssex FROM Student WHERE Cname LIKE '王_'; //_表示匹配单个字符
SELECT Cno, Ccredit FROM Ccourse WHERE Cname LIKE 'DB\_Design' ESCAPE '\';
// ESCAPE '\'表示跟在\后面的为换码字符, 这样\_就表示为_
空值 IS NULL, IS NOT NULL SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL;
逻辑运算符 AND, OR, NOT SELECT Sname FROM Student WHERE Sdept='Computer' AND Sage < 19;

ORDER BY:

SELECT Sno, Grade FROM SC WHERE Cno = '1156' ORDER BY Grade DESC; // 查询结果将以Grade排序

聚集函数:

函数名 描述 例子
COUNT ([DISTINCT|ALL] *) 统计元组个数 SELECT COUNT(*) FROM Student;
COUNT ([DISTINCT|ALL] <列名>) 统计一列中值的个数 SELECT COUNT(DISTINCT Sno) FROM SC WHERE Cno = ‘1156’ OR Cno = ‘1136’;
AVG ([DISTINCT|ALL] <列名>) 计算一列值的总和(此列必须是数值型) SELECT AVG(Sage) FROM Student;
SUM ([DISTINCT|ALL] <列名>) 计算一列值的平均值(此列必须是数值型) SELECT SUM(Ccredit) FROM SC, Course WHERE Sno = ‘200230’ AND SC.Cno = Course.Cno;
MAX ([DISTINCT|ALL] <列名>) 求一列值中的最大值 SELECT MAX(Sage) FROM Student;
MIN ([DISTINCT|ALL] <列名>) 求一列值中的最小值 SELECT MIN(Sage) FROM Student;

GROUP BY

SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno; //对查询结果按Cno的值分组,所有具有相同Cno值的元组为一组,然后对每一组用聚集函数COUNT计算,求得该组的学生人数。

如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用HAVING短语指定筛选条件:

SELECT Cno, AVG(Grade) FROM SC GROUP BY Cno HAVING COUNT(*) >= 3; //对查询结果按Cno的值分组,并且每组里面元组数量>=3的,求出其平均值。

WHERE子句与HAVING短语的区别在于作用对象不同,WHERE子句作用于表或者视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。

路慢慢其休远羲,吾将上下而求所
原文地址:https://www.cnblogs.com/garinzhang/p/2498471.html