数据库(mysql)学习-(不定期更新)


# 数据库认识

MySQL

DB

数据库,存储数据的容器

DEMS

数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB

SQL

结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言

MySQL的优点

1、开源、免费、成本低
2、性能高、移植性也好
3、体积小,便于安装

MySQL安装后的cmd部分命令

  • 登入
mysql -h local -P 3306 -u root -p1020
mysql -u root -p1020
  • 展示所有数据库
show databases;
  • 创建数据库
create database 数据库名字;
  • 使用数据库
use 数据库名字
  • 查看当前库内的所有表
show tables;
  • 创建表
create table Student(
    -> Sno int not null auto_increment primary key,
    -> Sname varchar(10) not null,
    -> Sex char(1) not null,
    -> Sage tinyint(100) not null,
    -> Sdept char(4) not null)comment = '学生表';
  • 删除表
drop table 表名;
  • 使用其他库
在当前库下直接使用 use 表名;

DQL语言的学习

基础查询
语法:
select 查询列表 from 表名;
类似于:System.out.Println(打印的东西)

特点:

1.查询列表可以是:表中的字段,常量值,表达式,函数

2.查询的结果是一个虚拟的表格

查询1
#1.查询表中的当个字段
SELECT last_name FROM employees;

#2.查询表中的多个字段
SELECT last_name,salary,email FROM employees;

#3.查询表中的所有字段
#方式1:
SELECT  `employee_id`,`first_name`,`last_name`,`email`,`phone_number`,`job_id`,`salary`,`commission_pct`,`manager_id`,`department_id`,`hiredate` 
FROM
 employees ;
#方式2:
 SELECT * FROM employees
注意
使用哪个库之前,应该先:
USE 库名

''是区分字段与关键字的

选中命令,可以使用f12进行代码格式化
查询
# 查询常量值
SELECT 100;
SELECT 'john';
# 查询表达式
SELECT 100%98;
# 查询函数
SELECT VERSION();
起别名
#1.起别名
/*
便于理解
如果查询的字段有重名的情况,使用别名可以区分开来
AS可以省略
*/
#方式一
SELECT 100%98 AS 结果;
SELECT last_name AS,first_name ASFROM employees;

#方式二:
SELECT last_name 姓,first_name 名 FROM employees;

#查询slary,显示结果为 out put(如果别名有空格,建议加上双引号)
SELECT salary AS "out put" FROM employees;
去重
#去重 DISTINCT
#查询员工表中设计道德所有的部门编号
SELECT DISTINCT department_id FROM employees;

#+号的作用
/*
mysql中的+只有一个功能:运算符
select 100+90:两个操作都是数值型,则做加法运算
select '123'+90;其中一方为字符型,将字符型数值转换为数值型
			转换成功,继续加法
select 'jphn'+90;	转换失败,则将字符型数值转换为0

select null+10;	只要其中一方为null,则结果肯定为null
*/
查询员工名和姓链接成一个字段,并显示为 姓名
SELECT
	last_name+first_name AS 姓名
FROM
	employees;
	
SELECT NULL+10;
函数:连接 CONCAT()
#连接 CONCAT函数(需要连接的字段名 )
SELECT CONCAT(first_name,last_name) AS 姓名 FROM employees;
显示表结构
DESC departments;
函数:IFNULL()
#IFNULL(expr1,expr2)
SELECT 
IFNULL(commission_pct,0) AS 奖金率,commission_pct 
FROM
employees;
函数:ISNULL()
判断某字段或表达式是否为null,如果是,则返回1,否则返回0
条件查询
语法:
select 查询列表 from 表名 where 筛选条件;
           1            2            3
执行顺序 2-->3--->1
筛选条件的分类:
	1.按条件表达式筛选:
		> < = !=(<>) >= <=
	2.按逻辑表达式筛选:
		&& || !
		and:如果两个条件都为true,结果九尾true,反之则为false
		or:只要有一个条件为true,结果就为true,反之则为false
		not
	3.模糊查询:
		like
		between and
		in
		is null
注意
  • like:
    一般和通配符搭配使用
    % 任意多个字符,包含0字符
    _ 占位符

  • 转义字符

    (\),但是推荐使用(自定义转义字符) ‘_KaTeX parse error: Expected group after '_' at position 1: _̲%' ESCAPE '’;

  • between and
    1.使用 between and 可以提高代码的简洁度
    2.两端的临界值都包含
    3.两个临界值,不要调换顺序

  • in
    含义:判断某个字段的值是否属于in列表中的某一项
    特点:
    1.使用in可以提高简洁度
    2.in列表的值,必须统一或兼容(隐式转换)

  • is null

    =或<>不能判断null值
    is null

  • 安全等于<=>

    is null 仅仅可以判断null值,可读性较高
    <=> 既可以判断数值,又可以判断null,但是可读性不高

案例
#案例
#1.查询工资大于>12000的
SELECT * FROM employees WHERE salary>12000;

#2.查询部门编号不等于90的员工名和部门编号
SELECT last_name,department_id FROM employees WHERE department_id<>90;

#逻辑表达式筛选
#3查询工资在10000-20000之间的,员工名,工资,以及奖金
SELECT last_name,salary,commission_pct FROM employees WHERE salary>=10000 AND salary<=30000; 

#4查询部门编号不是90-110之间,活着工资高于15000的员工信息
SELECT * FROM employees WHERE NOT(department_id>=90 && department_id<=110) || salary>=15000;

#模糊查询
/*
like:
	1.一般和通配符搭配使用
	% 任意多个字符,包含0字符
	_ 占位符
*/
#1.like   员工名中包含字符a的员工信息
SELECT * FROM employees WHERE last_name LIKE '%a%';

#2.查询员工名中第三个字符为n,第五个字符为l的员工名和工资
SELECT
	last_name,
	salary
FROM
	employees
WHERE
	last_name LIKE '__n_l%';

#3.转义字符(\),但是推荐使用(自定义转义字符) '_$_%' ESCAPE '$';
#查询员工名中第二个字符为_的员工名
SELECT 
	last_name
FROM
	employees
WHERE
	last_name LIKE '_$_%' ESCAPE '$';

#between and
/*
1.使用 between and 可以提高代码的简洁度
2.两端的临界值都包含
3.两个临界值,不要调换顺序
*/
#案例 查询员工表在100-200之间的员工信息
SELECT
	*
FROM
	employees
WHERE
	employee_id BETWEEN 100 AND 120;

#in
/*
含义:判断某个字段的值是否属于in列表中的某一项
特点:
	1.使用in可以提高简洁度
	2.in列表的值,必须统一或兼容(隐式转换)

*/
#1.查询员工的工种名是 AD_VP IT_PROG AD_PRES 中的一个员工名和工种编号
SELECT
	last_name,
	job_id
FROM
	employees
WHERE
	 job_id IN ('AD_VP','IT_PROG','AD_PRES');
	
# is null
/*
=或<>不能判断null值
is null

*/
# 查询没有奖金的员工名和奖金率
SELECT
	last_name,
	commission_pct
FROM
	employees
WHERE
	commission_pct IS NULL;

#安全等于<=>
/*
is null 仅仅可以判断null值,可读性较高
<=> 既可以判断数值,又可以判断null,但是可读性不高

*/
SELECT
	last_name,
	commission_pct
FROM
	employees
WHERE
	commission_pct <=>NULL;	 

#案例 查询员工号为176的员工的姓名,部门号,年薪
SELECT
	last_name,
	department_id,
	salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
	employees
WHERE
	job_id = 176;
排序查询
  • 语法:

    select 查询列表
    	from[where 筛选条件]
    	order by 排序列表 [asc(升序)|desc(降序)] 
    
  • 特点:
    1.asc表示升序,desc表示降序,如果不写默认为升序
    2.order by 后面支持别名,单个字段,多个字段,表达式,函数

  • 案例

    #案例:查询员工信息,要求工资从高到低排序
     SELECT * FROM employees ORDER BY salary DESC;
     
    #案例:查询部门编号>=90的员工信息,按照时间的先后顺序排列
    SELECT * FROM employees WHERE department_id>=90 ORDER BY hiredate ASC;
    
    #案例 按照年薪的高低显示员工的信息和年薪[按照别名排序]
    SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
    FROM employees
    ORDER BY 年薪 DESC;
    
    #案例 按照员工姓名的长度进行排序[按照函数排序]
    SELECT LENGTH(last_name) AS 字节长度,last_name,salary
    FROM employees
    ORDER BY LENGTH(last_name) DESC;
    
    #案例 查询员工信息,先按工资升序排列,再按员工编号降序[多个字段排序]
    SELECT *
    FROM employees
    ORDER BY salary ASC,employee_id DESC;
    
常见函数介绍
字符函数
  • length 获取字符串的字节个数

  • concat 拼接字符串

  • upper,lower 大小写转换

  • substr 截取字符串

  • instr 返回子字符串自一次出现的索引

  • trim去除前后空格

  • lpad用指定的字符实现左填充为指定长度

  • RPAD 用指定的字符实现右填充为指定长度

  • replace 替换

  • 代码

    #length 获取参数值的字节个数
    SELECT LENGTH('john');
    #utf8 一个汉字占3个字节
    SELECT LENGTH('你好hahaha');
    
    #CONCAT 拼接字符串
    SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;
    
    #upper,lower 大小写转换
    #将姓变大写,名变小写,然后拼接
     SELECT CONCAT(UPPER(last_name),'_',LOWER(first_name)) 姓名 FROM employees;
     
     #substr 截取字符串
     #注意:sql语句中索引从1开始
     SELECT SUBSTR('你是谁的谁谁谁',2)
     
     SELECT SUBSTR('你是谁的谁谁谁',1,3)
     
     #案例,将姓名中国的首字符大写,其他字符小写,并使用_拼接
     SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) AS output FROM employees;
     
     #instr 返回子串第一次出现的索引,如果找不到返回0
     SELECT INSTR('你是一个好人','好人') AS output;
     
     #trim 去前后空格
     SELECT LENGTH(TRIM('    好人    ')) AS output;
     SELECT TRIM('a' FROM 'aaaaa好人aaaaa啊aaaaa') AS output;
     
     #LPAD 用指定的字符实现左填充为指定长度
     SELECT LPAD('NI',10,'*') AS OUTPUT;
     
     #RPAD 用指定的字符实现右填充为指定长度
     SELECT RPAD('NI',10,'*') AS OUTPUT;
     
     #replace 替换
     SELECT REPLACE('今天是个好天气好天气今天是','今天','周五') AS pm;
     
    
数学函数
#四舍五入
SELECT ROUND(1.45);#默认取整
SELECT ROUND(1.567,3);#小数点后保留3位

#ceil 向上取整 返回>=该参数的最小整数
SELECT CEIL(1.002);

#floor 向下取整,返回<=该参数的最大整数
SELECT FLOOR(-9.9);

#truncate 截断
SELECT TRUNCATE(1.6999999,2);

#mod 取余
/*
mod(a,b) a-a/b*b
与被除数有关
*/
SELECT MOD(10,3);

日期函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-96bUTt8d-1637852683310)(file:///C:\Users\雍星\AppData\Roaming\feiq\RichOle\49577038.bmp)]

#now 返回当前系统日期+时间
SELECT NOW();

#curdate 返回当前日期,不包含时间
SELECT CURDATE();

#curtime 返回当前时间,不含日期
SELECT CURTIME();

#可以获取指定的部分,年月日小时
SELECT YEAR(NOW());

SELECT MONTH(NOW());
SELECT MONTHNAME(NOW());

#str_to_date 将字符通过指定的格式转换为日期

SELECT STR_TO_DATE('2021-2-12','%Y-%m-%d') AS 日期;

#查询入职日期是1992--4-3的员工信息
SELECT * FROM employees WHERE hiredate = '1992-4-3';


#DATE_FORMAT 将日期转换为字符
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS op;

#查询有奖金员工的员工名,和入职日期
SELECT last_name,DATE_FORMAT(hiredate,'%m月-%d日 %y年') AS 入职日期
FROM employees
WHERE commission_pct IS NOT NULL;
其他函数
SELECT VERSION();
SELECT DATABASE();
SELECT USER();
流程控制函数
#1.if函数  if else 效果
SELECT IF(10>5,'大','小');

SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金哦','有奖金') 备注
FROM employees;

#2.case函数使用一: switch case效果
/*

case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值