SQL语言基础(二)--以postersql为例

发布于:2025-04-14 ⋅ 阅读:(27) ⋅ 点赞:(0)

上次教程我们讲述了数据库中的增,删,改语句,今天我们来学习最后一个–‘改’的语句。

1.select语法

数据库查询只有select一个句子,但select语法相对复杂,其功能丰富,使用方式也很灵活

SELECT [ALL|Distinct] <目标列表达式>[,<目标列表达式>]...
FROM <表名或视图名>[,<表名或视图名>]...
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名1> [ASC|DESC]]

2.单表查询

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

select sno,sname
from student;

3.查询全体学生的所有属性

select *
from student;

4.查询全体学生的姓名、出生年份和所学专业,要求用小写字母表示所学专业名

select sname,'year of birth:',2002-sage,LOWER(smajor)
from student;

5.比较大小

查询入学年龄在20岁以下爱的学生的姓名及其入学年龄。

select sname,sage
from student
where sage<20;

6.选择范围

查询入学年龄不在20-23岁之间的学生的姓名及其入学年龄

select sname,sage
from student
where sage not between 20 and 23;

7.确定集合

查询不是信息、数学、计算机科学专业的所有学生的姓名和性别

select sname,sgen
from student
where smajor not in('is','ma','cs');

8.字符匹配

查询所有姓刘学生的姓名和性别

select sname,sgen
from student
where sname like '刘%';

9.使用换码字符

查询以“DB_"开头,且倒数第三个字符为i的课程的详细形况。

select *
from course
where cname like 'DB\-%i--' ESCAPE'\';

10.空值查询

select sno,cno
from sc
where grade is null;

11.多重条件查询

select sname
from student
where smajor='CS' and sage<20;

12.DISTINCT:查询所有学生的专业名列表

select distinct(smajor)
from student;

其中,DISTINCT用于去掉查询结果集中重复的行;若SELECT中没有特别指定,则缺省为ALL.

13.ORDER BY:查询全体学生所有字段,查询结果按专业名升序、入学年龄降序的方式排序输出。

select *
from student
order by smajor ASC,sage desc;

14.聚集函数语法

COUNT([DISTINCT|ALL]*)
COUNT([DISTINCT|ALL]<列名>)
SUM([DISTINCT|ALL]<列名>)
AVG([DISTINCT|ALL]<列名>)
MAX([DISTINCT|ALL]<列名>)
MIN([DISTINCT|ALL]<列名>)

1.查询student表中学生的总人数

select count(*)
from student;

2.查询选修了课程的学生人数

select count(distinct sno)
from sc;

3.查询选修了2号课程的学生的平均分

select avg(grade)
from sc
where cno='2';

4.GROUP BY:求各个课程号及相应的选课人数,并按照课程号分组输出

select cno,count(sno)
from sc
group by cno;

5.GROUP BY:查询选修了1,2号课程的学生的学号

select sno
from sc
where cno='1' or cno='2'
group by sno
having count(*)=2;

15.连接查询

语法:

SELECT * 
FROM 表A
INNER JOIN 表B ON 表A.= 表B.

LEFT JOIN(左连接)

SELECT * 
FROM 表A
LEFT JOIN 表B ON 表A.= 表B.

RIGHT JOIN(右连接)

SELECT * 
FROM 表A
RIGHT JOIN 表B ON 表A.= 表B.

FULL JOIN(全连接)

SELECT * 
FROM 表A
FULL JOIN 表B ON 表A.= 表B.

示例1:简单的内连接

-- 查询学生及其选课信息(只显示有选课的学生)
SELECT s.student_id, s.student_name, sc.course_id
FROM student s
INNER JOIN sc ON s.student_id = sc.student_id

示例2:多表连接

-- 查询学生姓名、课程名称和成绩
SELECT s.student_name, c.course_name, sc.grade
FROM student s
JOIN sc ON s.student_id = sc.student_id
JOIN course c ON sc.course_id = c.course_id

示例3:左连接保留所有学生

-- 查询所有学生及其选课信息(包括没选课的学生)
SELECT s.student_name, sc.course_id
FROM student s
LEFT JOIN sc ON s.student_id = sc.student_id

等值连接

select student.*,sc.*
from student,sc
where student.sno=sc.sno;

自身连接

select first.cno,second.cpno
from course first,course second
where first.cpno=second.cno;

外连接

select student.*,sc.*
from student,sc;

复合条件连接

select student.sno,sname
from student,sc
where student.sno=sc.sno and sc.cno='2' and sc.grade>90;
select student.sno,sname
from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno;