SQL基础:查询的基本使用

2023-12-22 00:09:20

上一节我们讲述了记录的基本操作,这一节我们来单独讲一下查询。

查询基本结构

首先我们来看下查询的基本结构

SELECT
    column1,
    column2,
    ...
FROM
    table_name
[WHERE
    condition]
[GROUP BY
    column1, column2, ...]
[HAVING
    aggregate_function(column) condition]
[ORDER BY
    column1 [ASC | DESC]];

其中中括号包含的部分是非必须的。接下来我们来学习下每个部分的作用。

辅助表创建

为了讲述方便,这里我们新增一张课程表,建表SQL

CREATE TABLE `courses` (
  `course_id` INT NOT NULL,
  `course_name` VARCHAR(100) NOT NULL,
  `instructor` VARCHAR(50) NOT NULL,
  `schedule` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`course_id`)
);

插入数据的SQL如下

INSERT INTO `courses` (`course_id`, `course_name`, `instructor`, `schedule`) VALUES
(1, 'Introduction to Computer Science', 'Prof. Smith', 'Mon/Wed 10:00 AM - 11:30 AM'),
(2, 'Database Management', 'Prof. Smith', 'Tue/Thu 2:00 PM - 3:30 PM'),
(3, 'Web Development', 'Prof. Davis', 'Mon/Wed/Fri 1:00 PM - 2:30 PM'),
(4, 'Mathematics for Computer Science', 'Prof. Davis', 'Tue/Thu 10:00 AM - 11:30 AM'),
(5, 'Artificial Intelligence', 'Prof. White', 'Wed/Fri 3:00 PM - 4:30 PM');

?

执行完毕之后我们将拥有2张表

where关键字

where的作用,是指定查询条件,缩写返回数据的范围。

select * from courses c ;

将得到

这里我们格式化下SQL,并加上筛选

我们将得到两条符合条件的数据

?

group by 语句

group by 语句即分组语句,by后边跟上一列或多列,表示将数据分组。常和聚合函数配合使用。

举个例子,这里我们要获取每个导师授课的课程数量,那就需要以导师名称instructor作为分组条件,使用count(*)聚合函数进行计数。

select
	instructor ,count(*)
from
	courses c 
-- where c.instructor ='Prof. Smith'
group by instructor  ;

得到

having语句

如果说where语句是第一层过滤,那么having就是第二层过滤。它是对group后的结果进行过滤。

举个例子,这里我们要在前一次查询的基础上筛选课程数量为2的导师,就可以用having

select
	instructor ,count(*)
from
	courses c 
-- where c.instructor ='Prof. Smith'
group by instructor  
having count(*)=2
;

结果

order by语句

见文知意,这个语句是用来对结果集进行排序的。

直接查询课程表,可以看到是以id排序的

如果我们想让它根据名称排序

select
	*
from
	courses c 
order by course_name 
;

可以看到,结果就根据名称进行A-Z的排序了

desc 即逆序

select
	*
from
	courses c 
order by course_name desc
;

结果

?

小结

本节我们讲述了查询的基本结构和使用,下一节我们将对前面学习的所有内容进行一下小结。

文章来源:https://blog.csdn.net/zcy_wxy/article/details/135141485
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。