终于结束查询,我人都傻了…光查询就102集!
来po上笔记吧,不然线下还得转pdf,没有目录看起来贼费劲!
注:B站视频里老师讲课用的课件等资料我没下载,但这笔记和题都是比着里面写的,代码运行过不报错。
除上课内容外,部分地方有本人注释。
在文末,有张好图,贼好使。
废话结束,下面开始
目录
1. DBMS-数据库管理系统
1.1. RDBMS - 关系型数据库
- Oracle
- MySQL
- MSSQL
- PG
1.2. NoSQL - 非关系型数据库
- MongoDB
- ES
- Redis
2.初始MySQL
2.1. MySQL服务启动
1. 手动。
2. cmd--> services.msc 打开服务的窗口
3. 使用管理员打开cmd
net start mysql:启动mysql的服务
net stop mysql:关闭mysql服务
2.2. MySQL登录
登陆前服务要启动
1. root用户:command line client
1. mysql -uroot -p密码
2. mysql -hip -uroot -p连接目标的密码
3. mysql --host=ip --user=root --password = 连接目标的密码
4. mysql -h主机名 -P端口号 -u用户名 -p密码(默认端口3306,用户root)
2.2. MySQL退出
1. exit
2. quit
2.3. 常见命令和语法大区
!!!别忘了分号啊,我说怎么一直报错,python写习惯了不爱加分号
1. 查看当前所有的数据库
show database();
2. 打开指定的库
use 库名;
(只要用了use你就在那个库中了)
3. 查看当前库所有的表
show tables;
4. 查看其他库所有的表
show tables from 库名;
5. 创建表 #看了100集还没学这里
create table 表名(
列名 列类型,
列名 列类型,
...
)
6. 查看表的结构 #可以看类型和空值,就像info()
desc 表名;
2.4. 查看服务器的版本:
#方式一:登录到mysql服务端
select version();
#方式二:没有登录到mysql服务端
mysql --version或mysql --V
2.5. 语法规范
1. 不区分大小写,但建议关键字大写,表名列名小写;
2. 每句命令要用分号结尾;
3. 每句命令根据需要,可以进行缩进 或换行;
4. 注释
单行注释:#注释文字
单行注释:-- 注释文字(注意空格)
多行注释:/* 注释文字 */
sqlyog
的ctrl s
是保存;选中之后F12
是格式化;- 我根据这个视频装了
navicat
,up演示地很详细,看不明白评论我也可以帮你装。然后在学习查询之前,导入了girls
和myemployees
两个数据集,我觉得没有必要去纠结test库,8.0版不自带了,并没有关系。
3. 查询 - DQL语言的学习
3.1. 进阶1 - 基础查询
# select 查询列表 from 表名
查询列表可以是:表中的字段、常量值、表达式、函数
查询的结果是一个虚拟的表格
查询表中的单个字段
SELECT
last_name
FROM
employees;
查询表中的多个字段
SELECT
last_name,
salary,
email
FROM
employees;
查询表中所有字段(sqlyog双击左侧)
#方式一
SELECT
`department_id`, #这个符号是着重号,用于说明是字段而不是关键字``
`department_name`,
`manager_id`,
`location_id`
FROM
employees;
#方式二
SELECT
*
FROM
employees;
查询常量值
SELECT 100;
SELECT 'john';
# 不区分字符和字符串
查询表达式
SELECT 100%98; #取余
查询函数
SELECT VERSION(); #调用并得到返回值
起别名
①便于理解
②如果要查询的字段有重名的情况,使用别名可以区分开来
#方式一:用as
SELECT
100 % 98 AS 结果;
SELECT
last_name AS 姓,
first_name AS 名
FROM
employees;
#方式二:空格
SELECT
last_name 姓,
first_name 名
FROM
employees;
#案例:查询salary,显示结果为out put
SELECT
salary AS "out put"
FROM
employees;
#不能:
SELECT
salary AS OUT put
FROM
employees;
#因为有特殊符号的时候就用双引号引起来,单引号也行的,建议双引号
去重distinct
#案例:查询员工表涉及到的所有部门编号
SELECT DISTINCT
department_id
FROM
employees;
“+” 号的作用
java中的+号:
①运算符:两个操作数都为数值型
②连接符:只要有一个操作数为字符串
mysql中的+号:
仅仅只有一个功能:运算符
SELECT
( 100+90 );
SELECT
'123' + 90;其中一方为字符型,会试图将字符型数值转换成数值型
如果转换成功则继续加法运算
SELECT
'john' + 90;如果转换失败,则字符型数组值转换成0;
SELECT NULL
+ 10;只要其中一方为null,则结果为null
使用concat进行连接
null和别人拼接的时候都是null
select concat("a", "b", "c") AS 结果
#案例:查询员工名和姓连接成一个字段,并显示为 姓名
SELECT
CONCAT( last_name, first_name ) AS 姓名
FROM
employees;
#不能:
SELECT
last_name + first_name AS 姓名
FROM
employees;
判断是否为空
#案例:commission_pct是否为空?为空返回what
SELECT
IFNULL( commission_pct, 'what' ) AS 奖金率,
commission_pct
FROM
employees;
3.2. 进阶2 - 条件查询
语法:
select
查询列表 第三步
from
表名 第一步
where
筛选条件; 第二步
分类:
1.按条件表达式筛选
条件运算符: > < = != or <>(不等于) >= <=
2.按逻辑表达式筛选
逻辑运算符: 与&& 或|| 非!
sql推荐使用 and or not
作用:连接条件表达式
&& and 都1则1
|| or 有1则1
! not 是0则1
3.模糊查询
like
between and
in
is null
is not null
3.2.1. 按照条件表达式查询
案例1:查询工资>12000的员工信息
#代码如下:
SELECT
*
FROM
employees
WHERE
salary > 12000;
案例2:查询部门编号不等于90号的员工名和部门编号
#代码如下:
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id != 90; #最好用<>
3.2.2. 按逻辑表达式筛选
案例1:查询工资在10000到20000之间的员工名,工资和奖金
#代码如下:
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary >= 10000
AND salary <= 20000;
案例2:查询部门编号不在90-120之间,或者工资高于15000的员工信息
#代码如下:
SELECT
*
FROM
employees
WHERE
department_id < 90 OR department_id > 120
OR salary > 15000;
WHERE
NOT ( department_id >= 90 AND department_id <= 120 )
OR salary > 15000;
3.2.3. 模糊查询
1. like:
①一般和通配符搭配使用
通配符:
% 任意多个字符,可以是0个
_ 任意单个字符
案例1:查询员工名中包含字符a的员工信息
#代码如下:
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%';
%a%用于匹配,%代表通配符,代表任意个字符
案例2:查询员工名中第3个字符为n,第五个字符为l的员工名和工资
#代码如下:
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__n_l%';
案例3:查询员工名中第二个字符为_的员工名(转义字符)
#代码如下:
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_\_%';
last_name LIKE '_a_%' ESCAPE 'a'; #a随便取的,为的仅仅是说明a是转义,可以用¥等随意,只需要说明就行
#------------------------------------------------#
2. between and
①使用between and可以提高语句的简洁度
②包含临界值
③两个临界值的位置不能调换,不会报错但效果不一样
案例1:查询员工编号在100到120之间的员工信息
#代码如下:
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100
AND 120;
#------------------------------------------------#
3. in
含义:
用于判断某字段的值是否属于in列表中的某一项
特点:
①使用in提高语句简洁度
②in列表的值类型必须统一或者兼容
③不支持通配符,相当于等号
案例1:查询员工的工种编号是 IT_PROT, AD_VP, AD_PRES中的一个的员工名和工种编号
#代码如下:
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROT'
OR job_id = 'AD_VP'
OR job_id = 'AD_VP';
方法二 - 用in:
WHERE
job_id IN ('IT_PROT' ,'AD_VP' , 'AD_VP');
#------------------------------------------------#
4. is null(is not null)
=或者<>不能用于判断null值
案例1:查询没有奖金的员工名和奖金率
#代码如下:
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
##############安全等于 <=> is null可以换成<=> null
WHERE
commission_pct <=> NULL;
案例2:查询工资为12000的员工信息
#代码如下:
SELECT
last_name,
salary
FROM
employees
WHERE
salary <=> 12000;
### 区别
IS NULL :仅仅可以判断NULL值
<=> :既可以判断NULL值,又可以判断普通的数值。
##函数重提
concat:拼接字符
isnull:判断,如果是空值则返回1,不是则返回0
ifnull:判断,如果是空值则返回一个给定值,不然则返回原本的值
因为有目录翻着方便,所以加了比较多的小标题。
要好好学习啊~