当前位置: 首页 > news >正文

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

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

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;

相关文章:

  • MySQL 的lock_wait_timeout 参数
  • 【C++初学】课后作业汇总复习(六) 函数模板
  • HarmonyOS: ArkUI V2装饰器-@Event:规范组件输出
  • AF3 ProteinDataset类的_patch方法解读
  • 如何在 Windows 安卓子系统 (WSA) 上安装小红书应用
  • Linux学习笔记_002:用户的基本操作
  • Node.js中URL模块详解
  • 【docker】--部署--安装docker教程
  • Linux内存管理架构(2)
  • WheatA小麦芽:农业气象大数据下载器
  • Python依赖注入完全指南:高效解耦、技术深析与实践落地
  • Midjourney 图生图:实现人物一致性的多元场景选择
  • 使用Java截取MP4文件图片的技术指南
  • Java连接MySQL数据库失败的8个关键排查点及解决方案
  • vue实现二维码生成器和解码器
  • Linux学习笔记_001:如何远程登陆?
  • 架构总览怎么写,才算工业级?
  • XXE讲解
  • 【Redis】Redis C++使用
  • 高可用集群-keepalived
  • 朝鲜海军新型驱逐舰进行首次武器系统测试
  • 住房和城乡建设部办公厅主任李晓龙已任部总工程师
  • 78家公募年度业绩比拼:23家营收净利双升,十强座次微调
  • 南京航空航天大学启动扁平化改革:管理岗规模控制在20%,不再统一设科级机构
  • 韩国下届大选执政党初选4进2结果揭晓,金文洙、韩东勋胜出
  • 中国黄金协会:一季度我国黄金产量同比增1.49%,黄金消费量同比降5.96%