SQL=数据操作语言 (DML) 和 数据定义语言 (DDL)。应该还有一个DSDL(数据存储有关的语言)吧?
所有的词语、符号、标点都要在英文输入法下输入 ,所有语句结束后不要忘了 ’;‘ 像C一样
操作符:=,<>(不等于,在某些版本中可以写作!=),> , < , >= , <= , BETWEEN ,LIKE
查询(单表和多表)
SELECT [ALL|DISTINCT]<目标列表达式>[,<>,<>,<>……]
FROM<表明|视图名>[,<>,<>,<>……]
[WHERE<条件表达式>]
[GROUP BY<列名>[ HAVING<条件表达式>]]
[ORDER BY<列名>[ASC|DESC|列名|列名 desc或asc(列名为英文,然后按序排)]];
根据WHERE的条件表达式从FROM指定的表格或者视图下进行查询,找到符合条件的元组。再按照SELECT中的目标表达式的要求。
选出所有元组中的属性值,形成结果表。
WHERE的表达式不是必须的,没有的话可以省略。条件表达式应该被 ’ ‘或者“” 包含,数字的话就不需要了。复杂的表达式用()包含。
SELECT子句中如果有多个目标表达式要用逗号’,‘隔开。这里的目标表达式不仅可以是属性名,也可以是表达式。(ALL是全部输出,DISTINCT是去除重复后的输出)
如果有GROUP BY子句。那么要按照列名的值进行分组。属性值相等的元组分到一个组里。如果有HAVING子句,那么只有符合HAVING中指定条件的组才可以输出。
如果有ORDER BY子句,还要按照列名的值进行升或降的排序。(ASC是升序,DESC是降序,一般只用DESC,因为本来就是升序排序的)
单表查询(显示的顺序同SELECT子句中的顺序相同)
查询指定的列
SELECT <列名>(,<>,<>)如果有多个列名 例: SELECT Sno,Sname
FROM <表名>; FROM S;
……
从S表(学生表)取出所有元组的Sno(学号),Sname(姓名)属性,形成新的元组输出。
查询表中的所有信息(即显示整张表格的信息)
SELECT *(等价于在这里指定表中的所有属性名) 例: SELECT *
FROM <表名>; FROM S;
显示S表中的所有属性列。
SELECT子句后的表达式不仅可以是列名,还可以是包含列名的表达式,如2015-Sage,输出出生年份。
可以用LOWER指定某一个属性列的输出为小写。LOWER(列名)
AND和OR 作用于WHERE子句中,将两个或以上的表达式连接起来。含义就是数学中 ∧,∨或者C中 && ,||的意思。
插入元组:INSERT 例:INSERT (假设S表中的属性列是 名字,学号,年龄,性别,专业)
INTO 表名(可以指定要插入的列) INTO S
VALUES( 属性值, , , , , ) ; VALUES(’张三‘,0001,18,’男‘,’计算机‘);
属性值的输入顺序和表中的属性列的顺序要相同。要注意属性列的数据类型,数字的话不需要’ ‘,字符型一定要’ ‘。
往指定列中插入数据的话,允许不讲整个元组填满,即只是插入一个元组中的几个属性值。
修改 例:
UPDATE 表名 UPDATE S
SET 列名=新的属性值 SET 名字='李四'
WHERE 列名=*****; WHERE 学号=0001;
修改符合WHERE子句的元组中指定的属性,更改为新的属性值。同样可以一次修改多个属性值。
删除 删除整个元组 例:
DELETE DELETE
FROM 表名 FROM S
WHERE 列名=****; WHERE 名字='李四';
属性列中名字为'李四'整个元组都被删除了。
删除所有的元组,但是表格依然保留着。 即 DELETE FROM 表名; 不需要WHERE条件。