Mysql学习笔记--day01

知识点和问题

        • 1.DB、DBMS、SQL的全称和基本概念是什么?
        • 2.SQL的优点
        • 3.MySQL产品的特点
        • 4.DBMS分为两类
        • 5.使用命令行启动和停止服务
        • 6.通过命令行登录mysql
        • 7.MySql中常见的命令
        • 8.Mysql的语法规范
        • 9.Mysql的语言分类
        • 10.基本查询语句
        • 11.条件查询
        • 12.is null 和 <=>
        • 13.查询员工号为176的员工的姓名和部门号和年薪
        • 14.访问select* from employees;和select * from employees where commission_pct like '%%' and last_name like '%%';结果是否一样?并说明原因?
        • 15.排序查询的语法规则
        • 16.查询员工信息,要求工资从高到低排序
        • 17.按年薪的高低显示员工的信息和年薪[按表达式排序]
        • 18.按姓名的长度显示员工的姓名和工资【按函数排序】
        • 19.查询员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】
        • 20.选择工资不在8000到17000的员工的姓名和工资,按工资降序
        • 21.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
        • 22.常见函数
        • 23.字符函数有哪些?
        • 24.数字函数
        • 25.日期函数
        • 26.流程控制函数

1.DB、DBMS、SQL的全称和基本概念是什么?

DB:DBMSSQL数据库(database):存储数据的“仓库”。它保存了一系列有组织的数据。
DBMS:数据库管理系统(Database Management System)。数据库是通过DBMS创建和操作的容器
SQL:结构化查询语言(Structure Query Language):专门用来与数据库通信的语言。
常见的数据库管理系统:MySQL、Oracle、DB2、SqlServer等

2.SQL的优点

1、不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL
2、简单易学
3、虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。

3.MySQL产品的特点

MySQL数据库隶属于MySQL AB公司,总部位于瑞典,后被oracle收购。
• 优点:
– 成本低:开放源代码,一般可以免费试用
– 性能高:执行很快
– 简单:很容易安装和使用

4.DBMS分为两类

– 基于共享文件系统的DBMS (Access )
– 基于客户机——服务器的DBMS(MySQL、Oracle、SqlServer)

5.使用命令行启动和停止服务

net stop 数据库名
net start 数据库名

6.通过命令行登录mysql

mysql [-h localhost -P 3306] -u root -p
退出:
exit或ctrl+C

7.MySql中常见的命令

1.查看数据库中有哪些数据库

show database

2.Mysql自带那几个数据库,分别用于存储什么?
mysql数据库:用户信息
information_schema:保存原数据信息
performance_schema:性能信息
3.进入指定的数据库

use test;

4.查看指定数据库中的表

show tables;
show tables from mysql;

5.查看当前所在的库

select database();

6.查看表结构

desc 表名

7.查看数据库版本
登录mysql查看数据库版本的方式:

select version();

退出mysql查看数据库版本的方式:

mysql --version
mysql -V

8.Mysql的语法规范

1.不区分大小写,但建议关键字大写,表名、列名小写
2.每条命令最好用分号结尾
3.每条命令根据需要,可以进行缩进或换行
4.注释
单行注释:#注释文字
单行注释:-- 注释文字
多行注释:/* 注释文字 */

9.Mysql的语言分类

DQL:数据查询语言(Data Query language)
DML:数据操纵语言(Data Manipulation Language)
DDL:数据定义语言(Data Definition Language)
TCL:事物控制语句(Transaction Control Language)

10.基本查询语句

select 查询列表 from 表名;
特点:
1.查询列表可以是:表中的字段、常量值、表达式、函数
2.查询的结果是一个虚拟的表格
例子:

use sysy;
select * from jobs;

对于和关键字重名的列明可以使用``引用起来
问题:
1.查询常量值

select 100;
select 'john'

2.查询表达式

select 100*98;

3.查询函数

select version();

4.起别名

select version() as 版本号;

两种方式,使用as关键字,或者使用空格

select salary as "out put" from employees;

5.去除重复

select distinct department_id from employees;

6.查看如下的运行结果:

select '123'+90;
select 'john'+90;
select null+10;

结果:
213
90
null
mysql中的+号:仅仅只是一个功能:运算符
7.mysql如何实现字符串的拼接

select concat('a','b','c') as 结果
select concat(last_name,' ',first_name) as 姓名
from employees;

8.显式出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT

select concat(first_name,',',last_name,',',job_id,',',ifnull(commission_pct,0)) as out_put
from employees;

11.条件查询

1.语法格式:
select 查询列表
from 表名
where 筛选条件;
2.分类
一、按条件表达式筛选

> = < != <> >= <=

二、以逻辑运算符式筛
逻辑运算符:
&& || !
and or not
三、模糊查询
like
between and #包含临界值
in #in列表的值类型必须一致或兼容
is null # =或<>不能用于判断null,is null 或 is not null可以判断null值
例题:
1.查询部门编号不是在90-110之间,或者工资高于15000的员工信息

select *
from employees
where department_id<90 or department_id>110 or salary>15000;
select *
from employees
where not(department_id>=90 and department_id<=110) or salary>15000;

2.查询员工姓名中包含字符a的员工信息

select * from employees where last_name like '%a%'

3.查询员工名中第三个字符为e,第五个字符为a的员工名和工资

select last_name,salary from employees where last_name like '__e_a%'

4.查询员工名中第二个字符为_的员工名

select last_name from employees where last_name like '_\_%'

或者

select last_name from employees where last_name like '_$_%' escape '$';

5.查询员工编号在100到120之间的员工信息

select * from employees where employee_id between 100 and 120;

6.查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个员工和工种编号

select last_name,job_id from employees where job_id in('IT_PROG','AD_VP','AD_PRES');

7.查询没有奖金的员工名和奖金率

select last_name,commission_pct from employees where commission_pct is null;

12.is null 和 <=>

is null:仅仅可以判断null值,可读性较高,建议使用
<=>:即可以判断null值,又可以判断普通的数值,可读性较低

13.查询员工号为176的员工的姓名和部门号和年薪

select last_name,department_id,salary*12*(1+ifnull(commission_pct,0)) as 年薪 
from employees 
where employee_id=176;

14.访问select* from employees;和select * from employees where commission_pct like ‘%%’ and last_name like ‘%%’;结果是否一样?并说明原因?

答案:不一样,如果判断的字段有null值。

15.排序查询的语法规则

select 查询列表
from 表
[where 筛选条件]
order by 排序列表 asc|desc # 默认数升序

16.查询员工信息,要求工资从高到低排序

select * from employees order by salary desc;

17.按年薪的高低显示员工的信息和年薪[按表达式排序]

select *,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 年薪 desc;
# order by salary*12*(1+ifnull(commission_pct,0)) desc;

18.按姓名的长度显示员工的姓名和工资【按函数排序】

select length(last_name) 姓名长度,last_name,salary
from employees
order by length(last_name) desc;

19.查询员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】

select *
from employees
order by salary asc,employee_id desc;
# order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
# order by 子句一般是放在查询语句的最后面,limit子句除外

20.选择工资不在8000到17000的员工的姓名和工资,按工资降序

select last_name,salary
from employees
where salary not between 8000 and 17000
order by salary desc;

21.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序

select *,length(email)
from employees
where email like '%e%'
order by length(email) desc,department_id asc

22.常见函数

1.单行函数
如:concat、length、ifnull
2.分组函数
功能:做统计使用,又称为统计函数、聚合函数、组函数

23.字符函数有哪些?

1.length 获取参数的字节个数

select length('张hhahaha');

2.concat 拼接

select concat(last_name,'_',first_name) from employees;

3.问题:将姓变大写,名变小写,然后拼接

select concat(upper(last_name),lower(first_name)) 姓名 from employees;

4.截取字串
substr、substring

select substr("李莫愁爱上了陆展元",7);#陆展元 索引从1开始的字符
select substr("李莫愁爱上了陆展元",1,3);#李莫愁

问题:姓名中首字符大写,其他字符小写然后用_拼接,显示出来

select first_name,CONCAT(upper(substr(first_name,1,1)),'_',lower(SUBSTR(first_name, 2,length(first_name))))
from employees

5.查找字符串的起始索引

select instr('杨不悔爱上了殷六侠','殷六侠') as out_put;
# 7
# 返回字串第一次出现的索引,如果找不到返回0

6.去掉字符串的前后空格

select length(trim(' 张 ')) as out_put;#3
select trim('aa' from 'aaaaa张aaaa张aaaa') as out_put;#a张aaaa张

7.用指定的字符实现左填充指定长度

select lpad('殷素素',10,'*') as out_put;#*******殷素素
select lpad('殷素素',2,'*') as out_put;#殷素

8.用指定的字符实现右填充指定长度

select rpad('殷素素',10,'*') as out_put;#殷素素*******
select rpad('殷素素',2,'*') as out_put;#殷

9.字符串替换函数

select REPLACE('张无忌爱上了周芷若','周芷若','赵敏') as out_put;

24.数字函数

1.四舍五入计算

select round(1.65);#2
select round(-1.55);#-2
select round(-1.567,2);#-1.57

2.向上取整

select ceil(1.00);#1
select ceil(2.1);#3
select ceil(-1.2);#-1  返回>=该参数的最小整数

3.向下取整

select floor(1.00);#1
select floor(-2.34);#-3 返回<=该参数的最大整数

4.截断

select truncate(1.6999999,1);#1.6

5.取模

select mod(10,-3);#1

25.日期函数

1.返回当前系统日期+时间

select now();#2020-05-09 14:44:50

2.返回当前系统日子,不包含时间

select curdate();

3.返回当前时间,不包含日期

select curtime();

4.获取指定的部分,年、月、日、小时、分钟、秒

select year(now());
select year('1998-1-1');
select year(hiredate)from employees;
select month(now());
select monthName(now());

5.将日期格式的字符转化成指定格式的日期
Mysql学习笔记--day01_第1张图片

select str_to_date('1998-3-2','%Y-%c-%d') as out_put;
select * from employees where hiredate=str_to_date('4-3 1992','%c-%d %Y');

6.将日期转化成字符

select date_format(now(),'%y年%m月%d日') as out_put;#20年05月09日

查询有奖金额员工名和入职时间(xx月/xx日 xx年)

select last_name,date_format(hiredate,'%m月/%d日 %y年') 入职日期
from employees
where commission_pct is not null;

7.查看版本号

select version();

8.查看数据库

select database();

26.流程控制函数

1.if函数

select if(10<5,'大','小');
select last_name,commission_pct,if(commission_pct is null,"无奖金,呵呵","有奖金,嘻嘻") 备注
from employees;

2.case函数
语法1:
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2

else 要显示的值n或语句n
end
案例:查询员工的工资,要求
部门号=30,显示的工资为1.1倍
部门号=40,显示的工资为1.2倍
部门号=50,显示的工资为1.3倍
其他部门,显示的工资为原工资

select salary 原始工资,department_id,
 case department_id
  when 30 then salary*1.1
  when 40 then salary*1.2
  when 50 then salary*1.3
  else salary
 end as 新工资
from employees;

语法2:
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
else 要显示的值n或语句n
end
练习:查询员工的工资情况
如果工资>20000,显示A级别
如果工资>15000,显示B级别
如果工资>10000,显示C级别
否则,显示D级别

select salary 原始工资,
  case
  when salary>20000 then 'A级别'
  when salary>15000 then 'B级别'
  when salary>10000 then 'C级别'
  else 'D级别'
  end 级别情况
from employees;

你可能感兴趣的:(MySql学习记录)