一、介绍
SQL(structured query language),作为非过程性语言,支持数据操作、用于描述数据的动态特性。
主要功能(4个):
数据定义语言Data Definition Language(DDL)
数据查询语言Data Query Language(DQL)
数据操纵语言Data Manipulation language(DML)
数据控制语言Data Control Language(DCL)
SQL核心: 从一个或多个表中返回指定记录的SELECT语句
二、数据查询语言
SQL子句 | 执行操作 | 是否必需 |
SELECT | 列出查询的字段 | 是 |
FROM | 列出包含查询字段或查询条件字段的表 | 是 |
WHERE | 指出查询条件 | 否 |
ORDER BY | 对结果排序,指出排序的依据 | 否 |
GROUP BY | 在包含聚合函数的SQL语句中,列出未在SELECT子句中汇总的字段 | 仅在存在这类字段时才是必须的 |
HAVING | 在包含聚合函数的SQL语句中,指定应用于在SELECT语句中汇总的字段的条件 | 否 |
eg.
查询学生的姓名和年龄
SELECT 姓名,year(now())-year(出生日期) AS 年龄 FROM student;
查询student中所有的字段和记录
SELECT * FROM student;
* 代表全部
查询已经选课的学生的学号
SELECT DISTINCT 学号 FROM grade;
DISTINCT 去重
所有课程的学分增加50%,重新计算各门课程的新学分并列出清单
SELECT 课程姓名,INT(学分*(1+0.5))AS 新学分 FROM course;
查询会计学院学生的学号、姓名和所属院系属性
SELECT 学号,姓名,所属院系 FROM student WHERE 所属院系="会计学院";
查询会计学院的非党员学生
SELECT 学号,姓名,所属院系,政治面貌 FROM student
WHERE 所属院系="会计学院" and 政治面貌<>"党员";
<>表示非
查询成绩在60分以下(不包括60分)、90分以上(含90分)学生的学号和成绩
SELECT 学号,成绩 FROM grade WHERE 成绩<60 or 成绩>=90;
查询教师中所有党员记录
SELECT * FROM student WHERE 是否党员=true;
字段类型为是/否型时,用true
查询所有信息学院和会计学院的学生信息
SELECT * FROM student WHERE 所属院系 IN('信息学院','会计学院');
查询所有选修了课程,但没有参加考试(成绩为“空”)的学生学号
SELECT 学号 FROM grade WHERE 成绩 IS NULL;
查询课程名中最后两个字是“管理”的课程信息
SELECT * FROM course WHERE 课程名称 LINK '*管理’;
LINK 包含
意义 样例 字符范围 LINK [a-z] 范围之外 LINK [! a-z] 非数字 LINK [!0-9] 组合字 LINK a[!b-m]#
多表查询
查询所有选修了的课程,但没有参加考试的学生的所属院系、姓名、课程名称和成绩
SELECT 所属院系,姓名,课程名称,成绩
FROM student,course,grade,schedule
WHERE student.学号 = grade.学号
AND grade.课程ID = schedule.课程ID
AND schedule.课程编号 = course.课程编号
AND 成绩 IS NULL;
查询经济学院开设的学分为2~4(含2和4)的所有课程的课程名称、学分和所属院系
SELECT DISTINCT 课程名称,学分,所属院系
FROM teacher,course,schedule
WHERE teacher.教师编号 = schedule.教师编号
AND schedule.课程编号 = course.课程编号
AND 所属院系="经济学院"
AND 学分 BETWEEN 2 AND 4;