mysql
1. 基础概念
- database(数据库):保存有组织的数据的容器(可存放多张表)。
- table(表):某种特定类型数据的结构化清单(用户表、产品表…)。
- column(列):表中的一个字段,所有表都是由一个或多个列组成的。
- row(行):表中每插入一条记录就是一行,行的总数就为记录的总数。
- primary key(主键):表中每一行都应该有可以唯一标识自己的一列(或一组列)。
- foreign key(外键):与本表有关联的另一张表的主键。
Navicat查看:
命令行查看:
显示所有数据库
show databases;
切换到rema数据库,显示其中所有表
use rema;
show tables;
显示console_jobs表中的id,title,department_id列的行信息
select id,title,department_id from console_jobs;
2.show
显示表列信息:
Navicat查看:右击console_jobs,点击设计表,可对表列信息进行查看编辑
命令行查看:
describe console_jobs:
# 或
show columns from console_jobs;
上面,我们大量运用到了show
语句用于查看数据库中的信息,如果想要了解更多show语句的用法,可以使用下面的命令或访问(官方文档-show):
show help;
3.select
最经常使用的sql语句就是select
语句了。它的用途是从一个或多个表中检索信息。为了使用select
检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。
检索单列或多列或所有列数据:
检索console_jobs表的id,title,department_id:
# 单列
select id from console_jobs;
# 多列
select id,title,department_id from console_jobs;
# 所有列(可能会降低性能)
select * from console_jobs;
检索不同行的数据
select distinct department_id from console_jobs;
不能部分使用distinct
,distinct
关键字应用于所有列而不仅是前置它的列。
限制返回的行数
select id,department_id from console_jobs limit 3;
limit 2, 5
指示MySQL返回从行3开始的5行。第一个数为开始位置,第二个数为要检索的行数。此语句的输出如下所示:
select id,department_id from console_jobs limit 2,5;
表中没有那么多行时,能返回多少就返回多少
4.order by
补充概念:
- clause(子句):SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。
单列排序
select id,salary_max from console_jobs order by salary_max;
多列排序
select id,salary_max,department_id from order by department_id,salary_max;
仅在多个行具有相同的department_id值时才对产品按salary_max进行排序。
指定排序方向
select id,salary_max,department_id from console_jobs order by department_id desc, salary_max;
以降序排序部门id(最大的在最前面),然后再对薪资排序。
desc
关键字只应用到直接位于其前面的列名。
找出最值
select salary_max from console_jobs order by salary_max desc limit 1;
在给出order by
子句时,应该保证它位于from
子句之后。如果使用limit
,它必须位于order by
之后。
5.where
在select
语句中,数据根据where
子句中指定的搜索条件进行过滤。
检索相等值
select id.title,working_place from console_jobs where salary_max=25;
在同时使用order by和where子句时,应该让order by位于where之后,否则将会产生错误。
where子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
检查单个值
select id.title,working_place from console_jobs where title="main";
MySQL在执行匹配时默认不区分大小写,所以main与Main匹配。
不匹配检查
select id.title,working_place from console_jobs where title<>"main";
何时使用单引号:单引号用来限定字符串。如果将值与串类型的列进行比较,则需要限定引号。用来与数值列进行比较的值不用引号。
范围值检查
select id,title,salary_max,working_place from console_jobs where salary_max between 5 and 15 ;
在使用between
时,必须指定两个值——所需范围的低端值和高端值。这两个值必须用and
关键字分隔。between
匹配范围中所有的值,包括指定的开始值和结束值。
空值检查
在创建表时,表设计人员可以指定其中的列是否可以不包含值。在一个列不包含值时,称其为包含空值null
。
select id,title,salary_max,working_place from console_jobs where salary_max is null;
在通过过滤选择出不具有特定值的行时,你可能希望返回具有null
值的行。但是,不行。因为未知具有特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤或不匹配过滤时不返回它们。
组合where子句
所有where
子句在过滤数据时使用的都是单一的条件。为了进行更强的过滤控制,MySQL允许给出多个where
子句。这些子句可以两种方式使用:以and
子句的方式或or
子句的方式使用。
基本概念:
- operator(操作符):用来联结或改变where子句中的子句的关键字。也称为逻辑操作符(logical operator)。
and操作符
select id,title,salary_max,work_year from console_jobs where salary_max=11 and work_year=1;
为了通过不止一个列进行过滤,可使用and
操作符给where
子句附加条件。
or操作符
select id,title,salary_max,work_year from console_jobs where salary_max=11 or work_year=1;
计算次序
select id,title,salary_max,work_year from console_jobs where (work_year=1 or work_year=2) and salary_max > 11 ;
SQL(像多数语言一样)在处理or
操作符前,会优先处理and
操作符。不要过分依赖默认计算次序,任何时候使用具有and
和or
操作符的where
子句,都应该使用圆括号明确地分组操作符,它能消除歧义。
in操作符
select id,title,salary_max,work_year from console_jobs where work_year in (1,2) order by salary_max;
圆括号在where
子句中还有另外一种用法。in
操作符用来指定条件范围,范围中的每个条件都可以进行匹配。in
取合法值的由逗号分隔的清单,全都括在圆括号中。
not操作符
select id,title,salary_max,work_year from console_jobs where work_year not in (1,2) order by salary_max;
mysql支持使用not
对in
、between
和exists
子句取反,这与多数其他DBMS允许使用not
对各种条件取反有很大的差别。