我半途而废的学习笔记之 MySQL (1)

终于结束查询,我人都傻了…光查询就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. 注释
单行注释:#注释文字
单行注释:-- 注释文字(注意空格)
多行注释:/* 注释文字 */
  1. sqlyogctrl s是保存;选中之后F12是格式化;
  2. 我根据这个视频装了navicat,up演示地很详细,看不明白评论我也可以帮你装。然后在学习查询之前,导入了girlsmyemployees两个数据集,我觉得没有必要去纠结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:判断,如果是空值则返回一个给定值,不然则返回原本的值

因为有目录翻着方便,所以加了比较多的小标题。

可以看这个图,方便做题

未完待续

要好好学习啊~

猜你喜欢

转载自blog.csdn.net/weixin_41661059/article/details/106888218