失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 了解MySQL 走进他的心

了解MySQL 走进他的心

时间:2022-11-12 20:51:13

相关推荐

了解MySQL 走进他的心

目录

前言

认识数据库

走进数据库

MySQL服务的启动和停止

MySQL服务的登录和退出

常见命令

MySQL的语法规范

数据库查询

基础查询

条件查询

排序查询

常见函数

分组查询

连接查询

子查询

分页查询

前言

认识数据库

【简介】

数据库,顾名思义,它是数据的集合。指的是长期存在计算机内、有组织、可共享的、大量数据的集合。数据是按

照特定的数据模型来组织、存储在数据库中的 。

【好处】

1、持久化数据到本地

2、可以实现结构化查询,方便管理

【相关概念】

1)DB(database)数据库,保存一组有组织的数据的容器

2)DBMS(Database Management System:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据

3)SQL:结构化查询语言,用于和数据库通信的语言

常见DBMS:MySQL、Oracle、DB2、SqlServer等

【特点】

1.将数据放到表中,表再放到库中

2.一个数据库可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性

3.表具有一些特性,这些特性定义了数据在表中如何存储,类似java中“类”的设计

4.表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java中的“属性”

5.表中的数据是按行存储的,每一行类型于Java中的“对象”

【优点】

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

走进数据库

MySQL服务的启动和停止

方式一:计算机——右击管理——服务——MySQL

方式二:通过管理员身份运行cmd命令提示行

netstartmysql (启动服务) netstopmysql (停止服务)

若最近在学习数据库的,需要经常用到,建议通过方式一将此程序设置为开机自启

MySQL服务的登录和退出

方式一:通过MySQL自带的客户端只限于root用户

方式二:通过cmd命令提示行关闭,未配置MySQL环境变量,需在MySQL安装的bin下启动cmd

登录:mysql 【-h主机名 -P端口号 】-u用户名 -p密码 eg: mysql -h localhost -P 3306 -u root -p2580

若是连本机,端口号为3306可简写为mysql -u root -p2580

退出:exit或ctrl+C

常见命令

查看当前所有的数据库-->show databases

打开指定的库 -->use 库名

查看当前所有库的所有表 -->show tables

查看其它库的所有表 -->show tables from 库名

创建表 create table 表名(列名 列类型,......)

查看表结构 -->desc 表名

查看服务器版本 方式一:登录到mysql服务端 -->select version; 方式二:没有登录到mysql服务端 --> mysql --version 或 mysql --V

MySQL的语法规范

1.不区分大小写,但建议关键字大写,表名、列名小写

2.每条命令最好用分号结尾(\g也可以)

3.每条命令根据需要,可以进行缩进,或换行

4.注释---> 单行注释:#注释文字 or 单行注释:-- 注释文字多行注释:/*注释文字*/

数据库查询

基础查询

语法

select 查询列表 from 表名;

单个字段查询

select 字段名 from 表名

多个字段查询

select 字段名1,字段名2... from 表名;

查询所有字段

select * from 表名;

查询常量值

select 常量值eg:select 100; select 'john';

注:字符型和日期型的常量值必须用单引号引起来,数值型不需要

查询函数

select 函数名(实参列表)eg:select VERSION();

起别名

方式一 使用as方式二 使用空格

注:若别名含特殊符号,用双引号括起来

去重

加distinct关键字eg:selectdistinctdepartment_id FROM employees;

+ :做加运算

select 数值+数值:直接运算

select 字符+数值:先试图将字符装换成数值,如果转换成功,则继续运算;否则转换成0,在做运算

select null + 值:结果都为null

concat 关键字

做拼接操作eg:select concat('a','b','c') AS 结果;

ifnull函数

功能:判断某字段或表达式是否为null,如果结果为null返回指定的值,否则返回原本的值

eg:select ifnull(commission_pct,0);

isnull函数

功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0

条件查询

语法

select查询列表from表名where筛选条件;

条件运算符

<、 >、 = 、<>、 !=、 <=、 >=、 <=>安全等于

逻辑运算符

java:&& || ! mysql:and or not

模糊查询like 、betweenand 、in

like:一般搭配通配符使用,可以判断字符型或数值型通配符:%任意多个字符 _任意单个字符

is null与 <=>比较

IS NULL:仅仅可以判断NULL值,可读性较高,建议使用

<=>:既可以判断NULL值,又可以判断普通的数值,可读性较低

#案例:查询员工名中第三个字符为i,第五个字符为a的员工名和对应工资SELECT last_name,salaryFROM employeesWHERE last_name LIKE'__i_a%';

排序查询

语法

select查询列表from表where筛选条件order by排序的字段|表达式|函数|别名 【asc|desc】

特点:

asc代表的是升序,desc代表的是降序 默认升序order by子句中可以支持单个字段、多个字段、表达式、函数、别名order by子句一般是放在查询语句的最后面,limit子句除外

#查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序SELECT last_name,department_id,salary * 12 * (1+ IFNULL(commission_pct, 0)) 年薪 FROMemployees ORDER BY 年薪 DESC,last_name ASC ;

常见函数

概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名

好处:隐藏了实现细节 提高代码的复用性

调用:select 函数名(实参列表) 【from 表】;

一、单行函数

length 字节长度 、concat 拼接 、substr 截取字符、instr 返回字符串第一次出现的索引,如果找不到返回0 、trim 去除前后空格 、upper 大写 、lower 小写 、lpad 用指定的字符实现左填充指定长度 、rpad 用指定的字符实现右填充指定长度 、replace 替换

数学函数

round 四舍五入 、ceil 向上取整 、floor 向下取整 、truncate 截断 、mod 取余 、rand 获取随机数,返回0-1之间的小数

日期函数

now 返回当前系统日期+时间 、curdate 返回当前系统日期,不包含时间 、curtime 返回当前时间,不包含日期 ;year、month、day、hour、minute、second、monthname(以英文方式返回月)、str_to_date 将字符通过指定的格式转换成日期 、date_format 将日期转换成字符 、datediff 返回两个日期相差的天数

#str_to_date 将字符通过指定的格式转换成日期SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;#案例:查询入职日期为1992--4-3的员工信息SELECT * FROM employees WHERE hiredate = '1992-4-3';SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %Y');#date_format 将日期转换成字符SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日') AS out_put; #12月16日#案例:查询有奖金的员工名和入职日期(xx月/xx日 xx年)SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %Y年') 入职日期FROM employees;

其他函数

VERSION(); 查询当前版本号 、DATABASE(); 查看当前库 、USER(); 查看用户 、password(字符') :返回该字符的密码形式,自动加密 、md5('字符'):返回该字符的MD5加密形式

流程控制函数

if函数:相当于if else 的效果 类似于三元运算符

#案例:查询员工的工资/*要求:部门号=30,显示的工资为1.1倍部门号=40,显示的工资为1.2倍部门号=50,显示的工资为1.3倍其他部门,显示的工资为原工资*/SELECT salary 原始工资,department_id,CASE department_idWHEN 30 THEN salary*1.1WHEN 40 THEN salary*1.2WHEN 50 THEN salary*1.3ELSE salaryEND AS 新工资FROM employees;

case函数:switch case的效果

#案例:查询员工的工资的情况/*要求:如果工资>20000,显示A级别如果工资>15000,显示B级别如果工资>10000,显示C级别否则,显示D级别*/SELECT salary,CASEWHEN salary>20000 THEN 'A'WHEN salary>15000 THEN 'B'WHEN salary>10000 THEN 'c'ELSE 'D'END 工资级别FROM employees;

二、分组函数

功能:用作统计作用,又称为聚合函数或统计函数或组函数

分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计算个数

特点:

sum、avg一般用于处理数值型max、min、count可以处理任何类型以上分组函数都忽略null值可以和distinct搭配实现去重的运算count函数的单独介绍:一般使用count(*)用作统计行数 count(1):统计结果集的函数和分组函数一同查询的字段要求是group by后的字段

效率:

MYISAM存储引擎下 ,COUNT(*)的效率高

INNODB存储引擎下,COUNT(*)和COUNT(1)的效率差不多,比COUNT(字段)要高一些

分组查询

#案例:按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些#1)查询每个员工长度的员工个数SELECT COUNT(*),LENGTH(last_name) len_nameFROM employeesGROUP BY LENGTH(last_name);#2)添加筛选条件SELECT COUNT(*) 个数,LENGTH(last_name) len_nameFROM employeesGROUP BY LENGTH(last_name)HAVING 个数>5;

连接查询

含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

笛卡尔乘积现象:表1有m行,表2有n行,结果=m*n行

sql92标准

仅支持内连接:等值连接 、非等值连接 、自连接

sql99标准

支持内连接+外连接(左外和右外)+交叉连接

内连接:等值连接 、非等值连接 、自连接

特点:多表的顺序可以调换 、n表连接至少需要n-1个连接条件 、等值连接的结果是多表的交集部分

#等值连接#案例:查询员工名、部门名、工种名,并按部门名降序 (三表连接)SELECT last_name,department_name,job_titleFROM employees eINNER JOIN departments d ON e.`department_id` = d.`department_id`INNER JOIN jobs j ON e.`job_id` = j.`job_id`ORDER BY department_name DESC;#----------------------------------------------------#非等值连接#查询员工的工资级别SELECT salary,grade_levelFROM employees eJOIN job_grades gON e.`salary` BETWEEN g.`lowest_sal` AND g.`highest_sal`;

外连接:左外连接 、右外连接 、全外连接

特点:

#案例:查询哪个部门没有员工#左外SELECT d.*,e.employee_idFROM departments dLEFT OUTER JOIN employees eON d.department_id = e.department_idWHERE e.employee_id IS NULL;#右外SELECT d.*,e.employee_idFROM employees eRIGHT OUTER JOIN departments dON d.`department_id` = e.`department_id`WHERE e.`employee_id`IS NULL;

sql92与 sql99比较:

功能:sql99支持的较多

可读性:sql99实现连接条件和筛选条件的分离,可读性较高

子查询

含义

嵌套在其他语句内部的SELECT语句称为子查询或内查询

外面的语句可以说INSERT、UPDATE、DELETE、SELECT等,一般SELECT作为外面语句较多

外面如果为SELECT语句,则此语句称为外查询或主查询

#案例:返回job_id与141员工相同,salary比143号员工多的员工 姓名、job_id、工资 (where后面)#1)查询141号员工的job_idSELECT job_idFROM employeesWHERE employee_id = 141;#2)查询143号员工的salarySELECT salaryFROM employeesWHERE employee_id = 143;#3)查询员工的姓名,job_id 和工资,要求job_id=1)并且salary>2)SELECT last_name,job_id,salaryFROM employeesWHERE job_id = (SELECT job_idFROM employeesWHERE employee_id = 141) AND salary >(SELECT salaryFROM employeesWHERE employee_id = 143);

#案例:查询最低工资大于50号部门最低工资的部门id和其最低工资 (having后面)#1)查询50号部门的最低工资SELECT MIN(salary) FROM employeesWHERE department_id = 50;#2)查询每个部门的最低工资SELECT MIN(salary)FROM employeesGROUP BY department_id;#3)在2)的基础上筛选,满足min(salary)>1)SELECT MIN(salary)FROM employeesGROUP BY department_idHAVING MIN(salary) > (SELECT MIN(salary) FROM employeesWHERE department_id = 50);

特点:

子查询放在小括号内子查询一般放在条件的右侧标量子查询,一般搭配着单行操作符使用 > < >= <= = <>列子查询,一般搭配着多行操作符使用 in、any/some、all子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果

分页查询

应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求

#案例:有奖金的员工信息,并且工资较高的前10名显示出来SELECT *FROM employeesWHERE commission_pct IS NOT NULLORDER BY salary DESCLIMIT 10;

特点:

limit语句放在查询语句的最后

公式:

要显示的页数 page,每页的条目数size

select 查询列表

from 表

limit (page-1)*size,size;

如果觉得《了解MySQL 走进他的心》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。