基础篇 - 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内置函数)

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

  1. 第四节基础篇 - SELECT 语句详解

    4.1 基本的SELECT语句 select * from T_WEATHER select cityname from t_weather 4.2 数学符号条件(>.<.>=.&l ...

  2. MySQL之SELECT 语句详解

    本文参考实验楼的SELECT 语句详解结合自己操作部分而写成. 注意:大多数系统中,SQL语句都是不区分大小写的,但是出于严谨和便于区分保留字和变量名,在书写的时,保留字应大写,而变量名应小写.所谓的 ...

  3. 基础select语句详解

    在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句.我们已经在不少地方用到了 SELECT * FROM table_name; 这条语句用于查看一张表中的所有内容. 而 SE ...

  4. MySQL8.0关系数据库基础教程(三)-select语句详解

    1 查询指定字段 在 employee 表找出所有员工的姓名.性别和电子邮箱. SELECT 表示查询,随后列出需要返回的字段,字段间逗号分隔 FROM 表示要从哪个表中进行查询 分号为语句结束符 这 ...

  5. MySQL 中的 SQL 语句详解

    @ 目录 总结内容 1. 基本概念 2. SQL列的常用类型 3. DDL简单操作 3.1 数据库操作 3.2 表操作 4. DML操作 4.1 修改操作(UPDATE SET) 4.2 插入操作(I ...

  6. SQL基础篇----select语句与排序问题

    一.检索--输出所有的列 SELECT * FROM my_friends WHEREfirst_name = 'cake'; 知识点1 * 代表选择出所有的行-----(什么行呢?)就是first_ ...

  7. Java基础之开关语句详解

    switch 语句是单条件多分支的开关语句,它的一般格式定义如下(其中break语句是可选的): switch(表达式) { case 常量值: 若干个语句 break; case  常量值: 若干个 ...

  8. sql select语句详解

    先group by 后  order by SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]    * | expression [ AS ...

  9. Vue.js 源码分析(九) 基础篇 生命周期详解

    先来看看官网的介绍: 主要有八个生命周期,分别是: beforeCreate.created.beforeMount.mounted.beforeupdate.updated   .beforeDes ...

随机推荐

  1. myeclipse 打开jsp文件出错

    第一步:找到MyEclipse的安装路径:第二步:删除掉MyEclipse\configuration下名为:org.eclipse.update的文件夹:第三步:产出之后重启myeclipse,在打 ...

  2. RobotFramework自动化测试框架-移动手机自动化测试Open Application关键字的使用

    在AppiumLibrary库中,Open Application关键字用来打开一个待测试移动APP. 示例1:连接本机已经打开的appium服务端,打开一个待测试的安卓APP,指定测试平台为Andr ...

  3. zk个人入门学习总结(1)

    ZooKeeper是一种分布式协调服务,用于管理大型主机.在分布式环境中协调和管理服务是一个复杂的过程.ZooKeeper通过其简单的架构和API解决了这个问题.ZooKeeper允许开发人员专注于核 ...

  4. flash数据交互

    新随笔 联系 订阅 管理 随笔 - 14  文章 - 5  评论 - 0 安卓中webview读取html,同时嵌入Flex的SWF,交互 安卓activity与html交互很简单,用javascri ...

  5. SPOJ:To the moon

    题面 vjudge Sol 主席树模板 # include <bits/stdc++.h> # define RG register # define IL inline # define ...

  6. [BZOJ1507] [NOI2003] Editor (splay)

    Description Input 输入文件editor.in的第一行是指令条数t,以下是需要执行的t个操作.其中: 为了使输入文件便于阅读,Insert操作的字符串中可能会插入一些回车符,请忽略掉它 ...

  7. java中获取项目在tomcat目录下的路径方法

    HttpServletRequest request //获取的是ROOT项目在tomcat下的路径 方法1: String path = request.getSession().getServle ...

  8. WPF自学入门(五)WPF依赖属性

    在.NET中有事件也有属性,WPF中加入了路由事件,也加入了依赖属性.最近在写项目时还不知道WPF依赖属性是干什么用的,在使用依赖项属性的时候我都以为是在用.NET中的属性,但是确实上不是的,通过阅读 ...

  9. ambari下 hive metastore 启动失败

    由字符集引起的hive 元数据进程启动失败 解决方法新增 这2句话 reload(sys)sys.setdefaultencoding('utf8')

  10. Spring整合Shiro并扩展使用EL表达式

    Shiro是一个轻量级的权限控制框架,应用非常广泛.本文的重点是介绍Spring整合Shiro,并通过扩展使用Spring的EL表达式,使@RequiresRoles等支持动态的参数.对Shiro的介 ...