SQL 基本的 SELECT 的语法
文章目录
每博一文案
- 从表中选取数据时需要使用 SELECT 语句,也就是只从表中选出(SELECT)必要数据的意思。通过 SELECT 语句查询并选取出必要的数据的过程称为匹配查询 或者查询
- SELECT 语句是 SQL语句中使用最多的最基本的SQL语句。
基本的SELECT 语句
- 该SELECT 语句包含了SELECT语句和 FROM 两个子句。子句是SQL语句的组成要素,是以 SELECT 或者是 FROM等作为起始的短语
SELECT <列名>, 或是是字段是一个意思
FROM <表名>;
- 虽然这两句是可以写在同一行的,但是不建议,因为当我们需要查找的列表非常多时,其可读性会,变得十分之差的,所以我们养成好习惯,分行写,增加可读性,美观性。
实践1:
SELECT 1
FROM DUAL; -- 这里的DUAL 伪表,我们并不是从某个表(数据库)中得到数据的而是,直接写的
结果1:
实践2:
SELECT 2*3
FROM DUAL;
结果2:
查询某列
- 查询的时候要注意一点: 就是要切换到对应的数据库中,去查询,不然,你会找不到同时,会报错的
SELECT employee_id -- 列名 ,或者时字段
FROM employees; -- 表名,
- 这里我查询的表是在 atguigudb 数据库中的 表;
- 结果如下图所示:显示出了我们所查询的 字段 employee_id 的信息
- 这里我们试试改变数据库,再查询看看结果: 不出意外,报错警告
-
所以当我们在查询时,一定要切换到对应的数据库中去查询
-
同样我们也可以多列查询的,加上逗号,分割开来就好了
SELECT employee_id,last_name,department_id,salary
FROM employees;
查询出表中所有的列
- 当我们需要查询出全部列时,可以在 SELECT 加个 * ,如下:
SELECT * -- 这里的星号 * 是个通配符,可以用来表示任意字符:这里表示:所有列
FROM employees;
- 上述命令:表示从 FROM 表中,选择(SELECT)所有的列(*), ***** 是通配符,可以代替任意字符,
- 一般情况下,除非需要使用表中所有的字段数据,不然最好不要使用通配符 * ,使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的列的,数据通常会大大减低查询和所使用的应用程序的效率,这里因为我们的数据并没有大多,所以看不出明显效果,但是当数据量非常大时,可以十分明显了,而我们的数据库本来就是为了存储大量数据而建立的,
- 当然也是有好处的:比如当我们不知道所需要的列的名称时,可以通过它获取它们。
- 在生产环境中,不推荐你直接使用 SELECT * 进行查询。
- 结果:如下:
为列设定别名
- 有的时候一些表中的列名,为了简写,一般人会不太清楚其中的是什么意思,如果给这些列加上”昵称“,而这里的”昵称“就是别名
- 有三种方法,当时我只建议两种方法
- 紧跟列名
- 使用关键字 AS 推荐的
- 紧跟列名 ,并使用双引号把别名括起来 推荐的
紧跟列名
- 我不建议使用该方式,
- 可读性非常的差
- 容易出错,因为是同过空格分隔,别名的,当你命名的 别名中存在空格时,如何,它又如何识别出来,别名
-- 下面这种方法不建议使用,
SELECT employee_id emp_id -- 把employee_id 别名为 emp_id
FROM employees;
结果
使用关键字 AS
-
在指定多个列的情况小,需要使用 ” , “ 逗号区分各个别名,并列上 ”列名“ AS ”别名“ 。
-
如果别名使用了特殊符号,就需要使用 ” “ 双引号将别名括起来。
-
比如:汉语别名 命名时就需要使用上双引号 (” “) 括起来,请注意是:双引号不是 单引号
-
格式
SELECT 列名 AS 别名
FROM 表名
实践:
SELECT employee_id AS emp_id ,
salary AS "工资"
FROM employees;
结果:
省略 AS 关键字 只使用双引号
- 为了偷懒把 AS 关键字给省略掉了,其实也是没有问题的,我个人是不会去省略掉的
实践:
SELECT employee_id "emp_id",
last_name "名字",
department_id "部门"
FROM employees;
结果:
SELECT employee_id AS "emp_id",
last_name AS "名字",
department_id AS "部门id",
salary*12 AS "年工资"
FROM employees;
- 结果:
常数的查询
- SELECT 子句中不仅可以书写别名,还可以书写常数,就是在 SELECT 查询结果中增加一列固定的常数列,这里的取值是我们指定的,而不是从数据表中动态取出的
- 这里你可能要问了?
- SQL 中的 SELECT 语法的提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数了。
- 我们使用单引号把常数括起来,记住是单引号,不是双引号,不要和上面的与 别名的双引号,弄混了
实践:
-- 这里我们自行定义一个 gongsi 列名(字段),其值我们设定为 '腾讯'
SELECT '腾讯' AS gongsi,
last_name AS "姓名",
salary*12 AS "年工资"
FROM employees;
结果:
从结果中删除重复行
- 大多数的数据表中都是有许多重复的值,我们又不需要太多重复的,只需要其中的一个就可以了
- 想要删除重复行时,可以通过在 SELECT 子句中使用 DISTINCT 关键字来实现,将重复的合并成一条信息
- 格式:
SELECT DISTINCT 后接删除重复的对象,
FROM 表名;
- 需要注意的一点就是: DISTINCT 关键字只能用在第一个列名之前,不可以插在 列名之间的
实践:
- 首先我们先看一个没有去除重复的结果
- 使用 DISTNICT 关键字去重复
SELECT DISTINCT department_id -- 去除重复对象 department_id
FROM employees;
结果
- 我们可以看到连 NULL也被合并成一个信息了,行数明显大大减少了,同样也没有重复的结果了
注意:
- DISTINCT 关键字只能出现在第一个列名之前,不能出现在列名之间的,不然报错
- 放在第一个列名之前
根据WHERE语句来选择记录
- 当我们只需要选择出 ,满足条件的记录,就像 小学老师记录成绩 及格 的同学的名字,不及格的不要,类似
- 我们可以通过 SELECT 语句中的 WHERE 子句来指定查询数据的条件
- 使用WHERE 子句,将不满足条件的排除,
- 满足条件的,显示出来
- 注意:在SQL中子句的书写顺序是固定的,不能随便更改,WHERE 子句必须紧跟在 FROM 子句之后,所以注意了,FROM 后面就不可以再跟上**” ;“ 分号了** ,这个点十分容易出错的,多加注意,多加注意,多加注意。
实践:
SELECT *
FROM employees
WHERE last_name = 'king'; -- 字符串使用单引号
结果:
- 我们也可以指定只显示 某列名的,
SELECT last_name , salary
FROM employees
WHERE last_name = 'king' AND salary > '9000.0';
- 结果:
- 注意了, 使用WHERE 关键字 ,FROM 后面不要跟 (;)分号
着重号
- 当我们的一些命名不小心与 关键字重名了,发生了,冲突了,从而导致无法查询,报错
- 我们可以使用着重号,解决这个冲突性,报错问题,
- 着重号 就是 ’ ‘ 单引号,使用方法就是把发生冲突的标识符,使用单引号括起来,就OK了
实践
SELECT *
FROM ORDER;
SELECT *
FROM 'ORDER'; -- 着重号