mysql基础篇 - SELECT 语句详解

基础篇 - SELECT 语句详解

SELECT语句详解

一、实验简介

SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELECT 语句的用法。

二、实验准备

在正式开始本实验内容之前,需要先下载相关数据库表,搭建好一个名为mysql_shiyan 的数据库(有三张表:department,employee,project),并向其中插入数据。

具体操作如下,首先输入命令进入 /home/shiyanlou/Desktop 目录:

cd /home/shiyanlou/Desktop

然后再输入命令,下载代码:

git clone http://git.shiyanlou.com/shiyanlou/SQL4

下载完成后,输入命令开启 MySQL 服务并使用 root 用户登录:

#打开 MySQL 服务
sudo service mysql start        

#使用 root 用户登录
mysql -u root

刚才下载的 SQL4 目录下,有个两文件 MySQL-04-01.sql 和 MySQL-04-02.sql,其中第一个文件用于创建数据库,第二个文件向数据库中插入数据。

(SQL4目录在桌面上,你可以用Gedit查看里面两个的文件。)

加载文件中的数据,需要在 MySQL 控制台中输入命令,搭建数据库:

source /home/shiyanlou/Desktop/SQL4/MySQL-04-01.sql

向数据库中插入数据:

source /home/shiyanlou/Desktop/SQL4/MySQL-04-02.sql

三、实验内容

在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句。之前的实验中,我们已经在不少地方用到了 SELECT * FROM table_name; 这条语句用于查看一张表中的所有内容。 而 SELECT 与各种限制条件关键词搭配使用,具有各种丰富的功能,这次实验就进行详细介绍。

1、基本的SELECT语句

SELECT 语句的基本格式为:

SELECT 要查询的列名 FROM 表名字 WHERE 限制条件;

如果要查询表的所有内容,则把 要查询的列名 用一个星号 * 号表示(实验2、3中都已经使用过),代表要查询表中所有的列。 而大多数情况,我们只需要查看某个表的指定的列,比如要查看employee 表的 name 和 age:

SELECT name,age FROM employee;

2、数学符号条件

SELECT 语句常常会有 WHERE 限制条件,用于达到更加精确的查询。WHERE限制条件可以有数学符号 (=,<,>,>=,<=) ,刚才我们查询了 name 和 age,现在稍作修改:

SELECT name,age FROM employee WHERE age>25;

筛选出 age 大于 25 的结果:

或者查找一个名字为 Mary 的员工:

SELECT name,age,phone FROM employee WHERE name=‘Mary‘;

结果当然是:

3、“AND”与“OR”

从这两个单词就能够理解它们的作用。WHERE 后面可以有不止一条限制,而根据条件之间的逻辑关系,可以用 OR(或) 和 AND(且) 连接:

#筛选出 age 小于 25,或 age 大于 30
SELECT name,age FROM employee WHERE age<25 OR age>30;

#筛选出 age 大于 25,且 age 小于 30
SELECT name,age FROM employee WHERE age>25 AND age<30;

而刚才的限制条件 age>25 AND age<30 ,如果需要包含25和30这两个数字的话,可以替换为 age BETWEEN 25 AND 30 :

4、IN 和 NOT IN

关键词IN和NOT IN的作用和它们的名字一样明显,用于筛选“在”或“不在”某个范围内的结果,比如说我们要查询在dpt3或dpt4的人:

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN (‘dpt3‘,‘dpt4‘);

而NOT IN的效果则是,如下面这条命令,查询出了不在dpt1也不在dpt3的人:

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN (‘dpt1‘,‘dpt3‘);

5、通配符

关键字 LIKE 在SQL语句中和通配符一起使用,通配符代表未知字符。SQL中的通配符是 _ 和 % 。其中 _ 代表一个未指定字符,% 代表不定个未指定字符。

比如,要只记得电话号码前四位数为1101,而后两位忘记了,则可以用两个 _ 通配符代替:

SELECT name,age,phone FROM employee WHERE phone LIKE ‘1101__‘;

这样就查找出了1101开头的6位数电话号码:

另一种情况,比如只记名字的首字母,又不知道名字长度,则用 % 通配符代替不定个字符:

SELECT name,age,phone FROM employee WHERE name LIKE ‘J%‘;

这样就查找出了首字母为 J 的人:

6、对结果排序

为了使查询结果看起来更顺眼,我们可能需要对结果按某一列来排序,这就要用到 ORDER BY 排序关键词。默认情况下,ORDER BY的结果是升序排列,而使用关键词ASC和DESC可指定升序或降序排序。 比如,我们按salary降序排列,SQL语句为:

SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;

7、SQL 内置函数和计算

SQL 允许对表中的数据进行计算。对此,SQL 有 5 个内置函数,这些函数都对 SELECT 的结果做操作:

函数名: COUNT SUM AVG MAX MIN
作用: 计数 求和 求平均值 最大值 最小值

其中 COUNT 函数可用于任何数据类型(因为它只是计数),而另4个函数都只能对数字类数据类型做计算。

具体举例,比如计算出salary的最大、最小值,用这样的一条语句:

SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;

有一个细节你或许注意到了,使用AS关键词可以给值重命名,比如最大值被命名为了max_salary:

8、子查询

上面讨论的 SELECT 语句都仅涉及一个表中的数据,然而有时必须处理多个表才能获得所需的信息。例如:想要知道名为 "Tom" 的员工所在部门做了几个工程。员工信息储存在 employee 表中,但工程信息储存在project 表中。

对于这样的情况,我们可以用子查询:

SELECT of_dpt,COUNT(proj_name) AS count_project FROM project
WHERE of_dpt IN
(SELECT in_dpt FROM employee WHERE name=‘Tom‘);

子查询还可以扩展到3层、4层或更多层。

9、连接查询

在处理多个表时,子查询只有在结果来自一个表时才有用。但如果需要显示两个表或多个表中的数据,这时就必须使用连接 (join) 操作。 连接的基本思想是把两个或多个表当作一个新的表来操作,如下:

SELECT id,name,people_num
FROM employee,department
WHERE employee.in_dpt = department.dpt_name
ORDER BY id;

这条语句查询出的是,各员工所在部门的人数,其中员工的 id 和 name 来自 employee 表,people_num 来自 department 表:

另一个连接语句格式是使用 JOIN ON 语法,刚才的语句等同于:

SELECT id,name,people_num
FROM employee JOIN department
ON employee.in_dpt = department.dpt_name
ORDER BY id;

结果也与刚才的语句相同。

四、总结

本节实验中学习了 SELECT 语句的常用方法:

  1. 基本语法
  2. 数学符号条件
  3. AND OR IN
  4. 通配符
  5. 排序
  6. SQL 内置函数和计算
  7. 子查询与连接查询

五、作业

  1. 按照实验过程完整操作一遍:先用 git 下载的代码建立数据库并插入数据,然后试用各种 SELECT 语句。实验过程截图。
  2. 使用连接查询的方式,查询出各员工所在部门的人数与工程数,工程数命名为 count_project。(连接3个表,并使用COUNT内置函数)
时间: 2024-10-02 03:27:32

mysql基础篇 - SELECT 语句详解的相关文章

MySQL之SELECT 语句详解

本文参考实验楼的SELECT 语句详解结合自己操作部分而写成. 注意:大多数系统中,SQL语句都是不区分大小写的,但是出于严谨和便于区分保留字和变量名,在书写的时,保留字应大写,而变量名应小写.所谓的保留字,即为:在高级语言中已定义过的字,使用者不能将这些字作为变量名和过程名使用. 1)SELECT语句的基本格式是:SELECT 查询的列名 FROM 表名 WHERE 限制条件:在上一篇博客创建一个简单的成绩管理系统 中,使用SELECT * FROM employee代表查询所有的列.例如,要

SELECT语句详解

来源: 整理自实验楼 链接: https://www.shiyanlou.com/courses/9 CREATE DATABASE school; use school; CREATE TABLE department ( dpt_name CHAR(20) NOT NULL, people_num INT(10) DEFAULT '10', CONSTRAINT dpt_pk PRIMARY KEY (dpt_name) ); CREATE TABLE user_info ( id INT(

sql中select语句详解及用途

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ AS output_name ] [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] sel

Java基础之开关语句详解

switch 语句是单条件多分支的开关语句,它的一般格式定义如下(其中break语句是可选的): switch(表达式) { case 常量值: 若干个语句 break; case  常量值: 若干个语句 break; ... case  常量值n: 若干个语句 break; default: 若干语句 } switch语句中的"表达式"和"常量值"的值必须为byte.short.int.char型或者枚举类型,而且互不相同. import java.util.Sc

sql select语句详解

先group by 后  order by SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]    * | expression [ AS output_name ] [, ...]    [ FROM from_item [, ...] ]    [ WHERE condition ]    [ GROUP BY expression [, ...] ]    [ HAVING condition [, ...] ]    [ {

linux基础篇-usermod命令 详解

参考资料:usermod manpage usermod - 修改用户帐户信息 modify a user account usermod [options] username 选项(options) -a|--append      ##把用户追加到某些组中,仅与-G选项一起使用 -c|--comment     ##修改/etc/passwd文件第五段comment -d|--home        ##修改用户的家目录通常和-m选项一起使用 -e|--expiredate  ##指定用户帐

(基础篇) 正则表达式详解

一 什么是正则表达式: 简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具.在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例如:Perl或PHP脚本语言.此外,JavaScript这种客户端的脚本语言也提供了对正则表达式的支持,现在正则表达式已经成为了一个通用的概念和工具,被各类技术人员所广泛使用. 在某个Linux网站上面有这样的话:"如果你问一下Linux爱好者最喜欢什么,他可能会回答正则表达式:如果你问他最害怕什么,除了繁琐的安装配置外他肯定会说正则表达

python之路-基础篇-常用模块详解

什么是模块? 模块就是一个.py文件,文件名就是这个模块的模块名 这个文件中有写好的n个功能,当我要用其中的某个功能的时候,我只需要使用import方法来引入这个模块就可以使用这个模块中写好的功能,就不需要重复造轮子了 模块的分类: 1.内置模块(python自带的比如像os,sys等模块) 2.自定义模块,自己写的一些模块 3.第三方模块(开源模块) 模块导入方法: import module # 导入module模块下面的全部方法 from module.xx.xx import * # 导

Vue 2.0 深入源码分析(五) 基础篇 methods属性详解

用法 methods中定义了Vue实例的方法,官网是这样介绍的: 例如:: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script> <title>Document&