SQL读书笔记(二)--数据查询

来源:互联网 发布:粒子群算法原理 编辑:程序博客网 时间:2024/05/22 07:02

接下来讲的是数据结构这一部分,还是很简单但是要记的东西多。

数据库查询是数据库的核心操作。SQL提供了SELECT语句进行数据库的查询,这个语句有灵活的使用方式和丰富的功能,格式如下

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

FROM<表名和视图名>

WHERE<条件表达式>

GROUP BY<列名1>[HAVING<条件表达式>]

ORDER BY<列名2>[ASC|DESC]

/*格式有点复杂,直接看例子解释*/

(一),单查询表

一,查询列

单查询表是只涉及一个表的查询

  选择表中的全部列或部分列,这就是关系代数的投影运算

/*投影运算还是蛮简单的吧*/

1.查询指定列列

1:查询全体学生的学号和姓名

SELECT Sno,Sname

FROM Student;

/*记住SELECT后面没有“,”或“;”*/

/*SELECT ......FROM.....:从哪个表中查找哪个列(属性)*/

/*上面的<目标列表达式>就是Sname,Sno*/

2:查询全体学生的姓名,学号,所在系;

SELECT Sname,Sno.Sdept

FROM Student;

/*这个例子中的三个目标列表达式会按照顺寻显示出来,用户可以自行修改顺序*/

2.查询全部列

查询全部列有两种方法,一是直接把目标列表达式的关键字全部列出来,二是直接把目标列表达式直接指定为*

SELECT Sname,Sno,,Ssex,Sage,Sdept

FROM Student;

或者

3:查询全体学生的详细记录

SELECT *

FROM Student;

3.查询经过计算的值

5:查询全体学生的姓名及其出生年份

SELECT Sname,2004-Sage

FROM Student;

/*这个目标列表达式还可以是一个算数表达式,函数等等*///当然会自动计算的

6;查询全体学生的姓名,出生年份和所在院系,要求用小写字母表示所有系名

SELECT Sname,2004-Sage,LOWER(Sdept)

FROM Student;

7:查询选修了该课程的学生学号

SELECT Sno

FROM SC;

如果结果是这样子:

                   Sno

              _______________

                  01

                  01

                  01

                  02

                  02

这样查询结果就包含了许多行,要想把重复的去掉就必须指定DISTINCT关键词:

SELECT DISTINCT Sno,

FROM SC;

/*这里就可以解释格式中的SELECT[ALL|DISTINCT],默认情况下是ALL,ALL会保留结果表中取值重复的行;DISTINCT会去掉重复的行*/

二、查询满足条件的元组(行)

WHEREwhere)是关键字

WHERE后面跟一个逻辑表达式(查询条件)

常用的查询条件有:

查询条件                     谓词 

比较                       =,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较符(表示反)

确定范围                   BETWEEN,AND,NOT,BETWEEN,AND

确定集合                   IN,NOT IN

字符匹配                   LIKE,NOT LIKE

空值                       IS NULL,IS NOT NULL

多重条件                   AND,OR,NOT NULL

/*这个表灰常重要啊,WHERE语句用的查询条件基本都用在这个表中了*/

7:查询计算机科学系全体学生的名单

SELECT Sname

FROM Student

WHERE Sdept=’CS’;

/*到最后才写分号,前面两个句子都不用*/

/*还有FROM后面跟的是一个表,目测不能跟列*/

/*要想确定是哪个列可以用WHERE语句来确定*/

(1)比较大小

8:查询所有年龄在20岁以下的学生姓名及其年龄

SELECT Sname,Sage

FROM Student

WHERE Sage<20;

9:查询考试成绩有不及格的学生的学号

SELECT DISTINCT Sno

FROM Student

WHERE Grade<60;

/*当学生有多门成绩不及格,用DISTINCT可以让他的学号只列一次*/

2)确定范围

10:查询年龄在20~23之间的学生的姓名,系别和年龄

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage BETWEEN 20 AND 23;

/*BETWEEN ....AND...*/

11:查询年龄不在20~23之间的学生的姓名,系别和年龄

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage NOT BETWEEN 20 AND 23;

(3)确定集合

12:查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别

SELECT Sname.Sage

FROM Student

WHERE Sdept IN(‘CS’,’MA’,’IS’);

还有NOT IN 就不举例子了

(4)字符匹配

谓词LIKE可以用来进行字符串的匹配

13:查询学号为200215121的学生的详细情况 

SELECT *

FROM Student

WHERE Sno LIKE ‘2000215121’;

等价于

SELECT *

FROM Student

WHERE Sno = ‘2000215121’;

14:查询所有姓刘的学生的姓名、学号和性别

SELECT Sname,Sno,Ssex

FROM Student

WHERE Sname LIKE “刘%”;

/*这里的“%”是指后面跟任意长度的字符串*a%b是以a为开头,b为结尾的字符串*/

/*还有一个就是”_”下横线,代表任意单个字符*/

这里还特别有一种特殊情况:

15:查询DB_Design课程的课程号和学分

SELECT Cno,Ccredit

FROM Course;

WHERE Cname LIKE ‘DB\_Design’ESCAPE’\’;

五、GROUP BY子句