SQL查询语句有多种,下面总结下。首先先建三张表用于后面的实验
--学生表,记录学生信息
CREATE TABLEstudent(
snoVARCHAR(10),
snameVARCHAR(10),
ssex ENUM('男','女'),
sageINT,
sdeptVARCHAR(10),PRIMARY KEY(sno)
);+-----------+-------+------+------+-------+
| sno | sname | ssex | sage | sdept |
+-----------+-------+------+------+-------+
| 201215121 | 李勇 | 男 | 20 | CS |
| 201215122 | 刘晨 | 女 | 19 | CS |
| 201215123 | 王敏 | 女 | 18 | MA |
| 201215125 | 张立 | 男 | 19 | IS |
+-----------+-------+------+------+-------+
--课程表,记录课程信息,cpno是指当前记录的先行课程的cno
CREATE TABLEcourse(
cnoINTAUTO_INCREMENT,
cnameVARCHAR(10),
cpnoINT,
ccreditINT NOT NULL,PRIMARY KEY(cno),FOREIGN KEY(cpno) REFERENCEScourse(cno)
);+-----------+-------+------+------+-------+
| sno | sname | ssex | sage | sdept |
+-----------+-------+------+------+-------+
| 201215121 | 李勇 | 男 | 20 | CS |
| 201215122 | 刘晨 | 女 | 19 | CS |
| 201215123 | 王敏 | 女 | 18 | MA |
| 201215125 | 张立 | 男 | 19 | IS |
+-----------+-------+------+------+-------+
--选课记录表,记录选课信息
CREATE TABLEsc (
snoVARCHAR(10),
cnoINT,
gradeINT);+-----------+------+-------+
| sno | cno | grade |
+-----------+------+-------+
| 201215121 | 1 | 92 |
| 201215121 | 2 | 85 |
| 201215121 | 3 | 88 |
| 201215122 | 1 | 90 |
| 201215122 | 2 | 80 |
+-----------+------+-------+
1.单表查询
仅涉及一张表的查询语句称为单表查询语句,举个栗子。
SELECT * FROM student;
SELECT FROM student WHERE sage>=20;
这些语句仅涉及了一张表,所以是单表查询语句。
2.多表查询
与单标查询对应,涉及多个表的查询为多表查询,其中又分为连接查询、嵌套查询、 派生表查询、集合查询。
2.1连接查询
连接查询是数据库查询中最常用的一种查询语句,是指通过连接字段和连接条件连接多个表从而进行查询,连接查询又分为小类:等值连接、非等值连接 、自然连接、外连接、内连接、自身连接。
等值连接与非等值连接
当连接条件是等于号(=)时的连接称之为等值连接,相反,当连接条件不是等于号就是非等值连接。
--查询每个学生的选修课情况,连接条件是等于,连接字段是sno
SELECT * FROM student,sc WHERE student.sno =sc.sno;+-----------+-------+------+------+-------+-----------+------+-------+
| sno | sname | ssex | sage | sdept | sno | cno | grade |
+-----------+-------+------+------+-------+-----------+------+-------+
| 201215121 | 李勇 | 男 | 20 | CS | 201215121 | 1 | 92 |
| 201215121 | 李勇 | 男 | 20 | CS | 201215121 | 2 | 85 |
| 201215121 | 李勇 | 男 | 20 | CS | 201215121 | 3 | 88 |
| 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 1 | 90 |
| 201215122 | 刘晨 | 女 | 19 | CS | 201215122 | 2 | 80 |
+-----------+-------+------+------+-------+-----------+------+-------+
该连接操作的过程是,首先拿出student表中的第一条记录,然后根据连接条件和连接字段,与 sc表中的所有记录进行匹配,合适接连接起来形成结果表中的一个元组。然后再拿student表的 第二条记录与sc表进行匹配,第三条记录...,如此反复直到取完。这一匹配算法称为嵌套循环连接算法
内连接
内连接就是等值连接或者非等值连接的另一种写法,写法有INNER JOIN ON或者CORSS JOIN USING两种
--使用内连接查询每个学生的选修课情况,查询结果和使用上面的等值连接一样。--在MySQL中,INNER可省略,CROSS JOIN= INNE