复习前言导入
1-95集,基础入门篇章 为什么使用数据库及数据库常用概念 db数据库Database是实打实的存放的数据库文件 dbmsDatabaseManagementSystem数据库管理系统,所以我们的MySQL就是DBMS数据库管理系统 SQL是StructuredQueryLanguage结构化查询语言,专门用来与数据库通信的语言 RDBMS和非RDBMS的区别? RDBMS是关系型数据库 关系型数据库的本质 1.实质: 这种类型的数据库就是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)
关系型数据库设计规则
ORM思想
Object Relational Mapping
数据库中的一个表<--->Java或Python中一个类存在对应关系
表中的一条数据<--->Java或Python中类的一个对象(或实体)
表中的一个列<--->Java或Python中类的一个字段(field)、属性
表的关联关系
- 表与表之间的数据记录有关系,现实世界中的各种实体之间的各种联系均匀关系模型来标识
- 四种:一对一关联、一对多关联、多对多关联、自我引用
一对一关联 一对多关系 多对多 自我引用 SQL概述
在这里插入图片描述
基本的SELECT语句
最基本的查询结构 mysql可以忽略大小写,关键字和字段大小写不区分
SELECT字段,字段2...FROM表名...
如果查询后面只有一个 SELECT 1
select 1;
这里相当于调用了一个虚表进行的查询操作 同样
select 1+1,3*2;
上面的原理是调用了一个虚表进行的操作
SELECT 1+1,3*2 FROM DUAL;
如果字段是*则表示查询所有的字段(或列)
SELECT* FROM employees;
SELECT employee_id,last_name,salary
from employees;
列的别名 我们查询显示出来的字符段属性通常称为结果集Result AS全称:alias(别名),可以省略
SELECT employee_id "工作者id",salary "工作者工资"
FROM employees;
SELECT employee_id 工作者id,salary 工作者工资
FROM employees;
SELECT employee_id AS 工作者id,salary AS 工作者工资
FROM employees;
通常用第二用写法,第二种适合使用单个单词的别名
如果是 person id则无法使用第二用法,需要使用第一用法
使用双括号引起来 "person id"
select id person id ×
select id "person id" √
而第三种的写法则可读性更高
select id as "person id" √
列的别名使用一对""引起来,不要使用单引号
因为MySQL没有那么规范,对于ANSI规范并不严谨
使用单引号也可以
但是不建议使用单引号
字符串、日期时间类型的变量需要使用一对''表示
如果不小心写成双引号,则也没有问题,原因和上述一致
去除重复行 通过关键字 DISTINCT 实现去除重复行,来实现一些单条数据查询操作
SELECT department_id FROM employees ;
SELECT DISTINCT department_id FROM employees ;
SELECT salary,department_id
from employees;
SELECT salary,DISTINCT department_id
from employees;
如果出现DISTINCT在后面,则无法实现去重操作
SELECT DISTINCT department_id,salary
FROM employees;
此处的查询结果条数比较少,因为是整体的去重
包括了department_id和salary的重复
此处仅仅没有报错,但是结果并没有什么实际的意义
空值参与运算
SELECT employee_id,salary "月工资",salary*(1+commission_pct)*12 "年工资"
FROM employees;
如何解决
SELECT employee_id,salary "月工资",salary*(1+IFNULL(commission_pct,0))*12 "年工资"
FROM employees;
着重号 着重号的作用是为了区分关键字和自定义字段,进行不突破
CREATE TABLE(
`date` DATE
`asc` ASC
)
着重号在ESC键下方 ~和`键
实际作用 ORDER是排序关键字:ORDER BY 如果我们有一个表或者属性等,和SQL定义的关键字发生了冲突,并且没有添加着重号`,则查询或其他操作时会报错,普通字段或表名也是可以添加着重号,建议在和关键字重名时再添加着重号 使用着重号来解决冲突问题 不建议命名和关键字一样 查询常数
SELECT '尚硅谷','666',employee_id,last_name
FROM employees;
匹配概念 常量匹配我们的字段 显示表结构 使用关键字DESCRIBE 使用关键字缩写DESC
DESCRIBE `order`;
DESC `order`;
过滤数据 我们是会筛选数据的并不会每次都查询所有的数据,而是只需要查询出满足条件的数据 SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件
- 使用WHERE子句,将不满足条件的行进行过滤
- WHERE子句紧随FROM子句
SELECT *
FROM employees
SELECT*
FROM employees
WHERE department_id = 90;
SELECT *
FROM employees
WHERE last_name = 'King';
SELECT小练习
SELECT employee_id,last_name,(salary*12)AS "ANNUAL SALARY"
FROM employees;
SELECT DISTINCT job_id
FROM employees;
SELECT last_name,salary
FROM employees
WHERE salary>12000;
SELECT last_name,department_id
FROM employees
WHERE employee_id = 176;
DESC departments;
SELECT *
FROM departments;
运算符
SELECT *
FROM employees
WHERE commission_pct <=> NULL;
安全等与专门为null而生
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NULL;
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL
SELECT last_name,salary,commission_pct
FROM employees
WHERE ISNULL(commission_pct);
NOT是否的意思,取反
SELECT last_name,salary,commission_pct
FROM employees
WHERE NOT commission_pct <=> NULL;
SELECT LEAST('g','b','t','m'),GREATEST('g','b','t','m')
FROM DUAL;
SELECT LEAST(first_name,last_name)
FROM employees;
SELECT LEAST(LENGTH(first_name),LENGTH(last_name))
FROM employees;
运算符
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6000 AND 8000
SELECT employee_id,last_name,salary
FROM employees
WHERE salary >=6000 && salary <=8000;
SELECT employee_id,last_name,salary
FROM employees
WHERE salary <6000 OR salary>8000;
SELECT employee_id,last_name,salary
FROM employees
WHERE salary NOT BETWEEN 6000 AND 8000;
SELECT last_name,salary,department_id
FROM employees
WHERE department_id IN (10,20,30);
&& 且 大于1且小于10
or 或 大于1或小于10
NOT 非 不小于1或者不大于10
BETWEEN...AND... 两值之间的判断(包含边界值) 在1和10之内
IN 等于或在 id在10
NOT IN id不在10
LIKE 模糊查询
ORDER BY实现排序操作
- ASC(ascend):升序
- DESC(descend):降序
ORDER BY 子句在SELECT语句的结尾 语法:关键字 ORDER BY 选择对象 … 排序方式 DESC倒序(默认ASC升序)
SELECT*FROM employees;
SELECT employee_id,last_name,salary FROM employees;
SELECT employee_id,last_name,salary FROM employees ORDER BY salary DESC;
SELECT employee_id,last_name,salary FROM employees ORDER BY salary ASC;
列的别名只可以在ORDER BY中使用,不可以在WHERE中使用,因为流程是,先看查询哪个表,然后再过滤条件,最后再查询要查询哪些内容,这样做可以(where执行早,所以别名识别不到)。 在排序条件相同的情况下怎么办? 一级排序是根据查询字段
SELECT employee_id,salary,department_id
FROM employees
ORDER BY department_id DESC,salary ASC;
LIMIT分页
SELECT employee_id,last_name
FROM employees
LIMIT 0,20;
多表查询
|