SQL特点
SQL是大小写无关的,但一般的习俗是,关键字大写(SELECT WHERE),用户自定义的小写,如表名。
SQL如何注释, 两个 -- 开头,即为注释。
SQL只用于关系型数据库,如MySQL,NoSQL数据库,不能用SQL去查询。
尽管SQL有ISO的标准,但各个厂商在实现上,可能有微小的语法区别,所以遇到这种情况,要看自己所使用的数据库的SQL语法。
什么是关系型数据库?
关系型数据库就是数据以关系的形式存储。
例如下表,这是一张student表,记录的是学生的roll_no,name,address,phone,age。
这就是关系,学生的名字,学生的地址,等等。
有一些专业术语。
attribute, 属性,就是用来定义关系的,如name,age等,
tuple,元组,或叫一组元素,关系中的每一行叫一个tuple。
tuple的原意是 a structure of data that has several parts
一个有多部分组成的数据结构
一个tuple就是一行数据
度 degree,有几个属性,就叫有几个度,上面这个表有5个属性,也就是 5度。
Cardinality这个表有多少行
Column 列。列表示有个属性的值的集合。下面这就是Roll_no 的列。
查询语句分为三类
1,DDL Data Definition Language ,数据定义语句
用来定义数据库的结构,如CREATE TABLE, ADD COLUMN, DROP COLUMN等
2,DML Data Manipulation Language , 数据操作语句
操作关系中的数据,如 INSERT, DELETE, UPDATE等
3,DQL Data Query Language 数据查询语句
select
通常查询语句有以下四部分组成
- SELECT [DISTINCT] Attribute_List FROM R1,R2….RM
- [WHERE condition]
- [GROUP BY (Attributes)[HAVING condition]]
- [ORDER BY(Attributes)[DESC]];
例句1 ,查询所有学生的Roll_No和名字
SELECT ROLL_NO, NAME FROM STUDENT;
例句2,查询ROLL_NO大于2的学生的Roll_No和名字
SELECT ROLL_NO, NAME FROM STUDENT WHERE ROLL_NO>2;
例句3,如果想要获取全部属性,可以使用* 代替 书写全部的属性
SELECT * FROM STUDENT
WHERE ROLL_NO>2;
例句4,如果想要以age的升序来排序,可以用order by子句
SELECT * FROM STUDENT ORDER BY AGE;
默认是按照升序排列的,所以ORDER BY AGE等于ORDER BY AGE ASC,
如果要倒序,改为ORDER BY AGE DESC
例句5,如果想要某个值只出现一次,使用DISTINCT
SELECT DISTINCT ADDRESS FROM STUDENT;
AGGRATION FUNCTIONS (聚集函数)
常见的函数有
count 用来计算有多少行
sum 求属性的和
还有 min,max,avg可以用,所有的聚集函数,只返回一行数据。
GROUP By 用来将数据根据一个属性或者一组属性来分组。而且总是和聚集函数连用。
例句6
SELECT ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS);
SUM(AGE)不是按照所有的年龄求和,而是按照分组后的年龄求和。
例句7
SELECT ROLL_NO, ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS);
这个句子是错的,应为每个地址中的学生的ROLL_NO是不一样的,所以select从句后的属性 应该加上聚集函数,让这个SQL查询有意义。
所以当使用GROUP By的时候,GROUP By中的属性,可以出现在select中,而不在GROUP By的部分,需要使用集合函数。
翻译自:
Structured Query Language (SQL) - GeeksforGeekswww.geeksforgeeks.org