带你走进数据库的大门mysql
数据库的相关概念,什么是数据库?
一、数据库的好处
1.可以持久化数据到本地
2.结构化查询
Mysql介绍
一、mysql的背景
前身属于瑞典的一家公司,mysql,AB
二、mysql的优点
1.开源,免费,成本低
2、性能高,移植性也好
3、体积小,便于安装
三、mysql的安装
属于c/s框架软件,一般来讲安装服务端
四、mysql服务的启动和停止
方式一:通过命令行 net start 服务名
net stop 服务名
方式二:计算机--右击--管理--服务
五、mysql服务的登录和退出
登录:mysql【-h 主机名 -p端口号】 -u 用户名 -p密码
退出 exit 或者crrl+c
二、数据库的常见概念
2.DB:数据库,存数据的容器
3.DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
3.SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件 语言
三、数据库的存储特点
1.数据存放到列表中,然后列表再放入库中
2.一个库可以有多张表,每张表具有唯一的表名来标识自己
3.表中有一个或多个列,列又称为“字段”,相当于Java中“属性”
4.表中的每一行数据就相当于Java中的对象
四、常见的数据库管理系统
mysql oracle db2 aqsserver
#------------------------ 进阶1 :基础查询 ---------------------
#打开库
USE employees;
#1.查询表中的一个字段
SELECT first_name FROM employees;
#2.查询表中的多个字段
SELECT first_name,last_name FROM employees;
#3.查询表中全部字段
SELECT*FROM employees;
#4.查询常量值
SELECT 100;
SELECT 'john';
#5.查询表达式
SELECT 100*10;
#6.查询函数
#mysql 版本
SELECT VERSION();
#7.起别名
/*
①便于理解
②如果要查询有重名的情况
*/
#方式一
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; #注意:有关键词的别名要用双引号引起来
#8. 去重
#案例:查询员工表中涉及到的所有部门编号 关键字:distinct
SELECT DISTINCT department_id FROM employees;
#9. +的作用
/*
java 中的加号:
1 运算符,只要在两个操作数都为数值型
2 连接符,只要有一个操作数为字符串
mysql 中加号+:
仅仅只有一个功能:运算符
① 两个操作数都为数值型,则做加法运算
② 其中一方为字符型,试图将字符数值转换成数值型
如果转换成功,则继续加法运算,
select ‘John’+90; 如果转换失败,则将字符型数值转换为0
select null+0; 如果一方为null,则结果为null
*/
补充:concat连接字符
#案例:查询员工的姓和名 连接成一个字段 并显示为姓名
SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees;
#10.显示表的结构
DESC employees;
11.ifnull 函数
功能:判断某字段或表达式是否为null,如果为null,返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees
12 isnull 函数
判断某字符串或表达式是否为null,
返回值为1(真),和0(假)。
#------------------------ 进阶2 :条件查询 ---------------------
/*
语法:
select 查询列表 from 表名 where 筛选条件;
执行顺序:表名-》筛选条件-》查询列表;
分类:
一、按条件表达式筛选
条件运算符:> < = != <>(不等于) >= <=
二、按逻辑运算符筛选
逻辑运算符:&& || !
and or not
三、模糊查询
like
between and
in
is null
*/
#1.an条件表达式查询
#案例一:查询工资> 12000的员工信息
SELECT * FROM employees WHERE salary>12000;
#案例二:查询部门编号不等于90号的员工名和部门编号
SELECT first_name,department_id
FROM employees
WHERE department_id != 90;
#2.按按逻辑运算符筛选
#案例一:查询工资在一万到两万之间的 员工名 工资 以及奖金
SELECT first_name,salary,commission_pct
FROM employees
WHERE salary>=10000 AND salary<=20000;
#案例二:查询部门编号不是在90到110之间,或者工资高于15000的员工名
SELECT first_name
FROM employees
WHERE department_id<90 OR department_id>90 OR salary>15000;
#3. 模糊查询
/*
特点:
① 与通配符搭配之用:%任意多个字符,包含0个字符
_任意单个字符
like
between and
使用between and 可以调提高语句的简洁度
包含临界值
两个临界值不可以掉换位置
in
使用in 提高语句简洁度
in列表的值类型必须一致或者兼容
is null
= 或 <> 不能判断null值
is null 或 is not null 可以判断 null 值
*/
#案例一:查询员工名中包含字符a的员工信息
SELECT *
FROM employees
WHERE last_name LIKE '%a%';
#案例二:查询员工名中第三个字符为e的第五个字符为a的员工名
SELECT last_name
FROM employees
WHERE last_name LIKE '__n_a';
#案例三:查询员工中第二个字符为_的员工名
SELECT last_name
FROM employees
/**
\为默认的转义字符
WHERE last_name LIKE '_\_%';
*/
#我们也可以自己设置转义字符
WHERE last_name LIKE '_$_%' ESCAPE'$';
#between and 案例一:查询员工编号在100到120之间的员工信息
SELECT *
FROM employees
WHERE employee_id>=100 AND employee_id<=120;
#----------------------------------------------
SELECT *
FROM employees
WHERE employee_id BETWEEN 100 AND 120;
# in 案例一:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES
SELECT last_name,job_id
FROM employees
WHERE job_id='IT_PROG' OR job_id='AD_VP' OR job_id='AD_PRES';
#-------------------------------------------------------------------
SELECT last_name,job_id
FROM employees
WHERE job_id IN('IT_PROG','AD_VP','AD_PRES');
#安全等于 <=>
#查询工资为12000的员工
SELECT last_name,salary
FROM employees
WHERE salary <=> 12000;
#is null pk <=>
/*
is null :紧紧可以判断null值,可读性较高
<=> :既可以判断null值又可以判断普通的数值
*/
#------------------------ 进阶3 :排序查询 ---------------------
/*
引入:
select * from employees;
语法:
select 查询列表
from 表
【where 筛选条件】
order by 排序类表 【asc升序 或者 desc降序,默认是升序】
一般放在查询语句的的后面,limit子句除外
*/
#案例一:查询员工信息,要求工资从高到低排序
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 年薪 ASC;
#案例四:按姓名的长度显示员工的姓名和工资【按函数(别名)排序】
SELECT LENGTH(last_name) AS 姓名长度,last_name,salary FROM employees ORDER BY 姓名长度 ASC;
#案例五:查员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】
SELECT * FROM employees ORDER BY salary ASC,employee_id DESC;
#练习一:查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
SELECT last_name,department_id,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
ORDER BY 年薪 DESC,last_name ASC;
#练习二:选择工资不在8000到17000的员工姓名和工资,按工资降序
SELECT last_name,salary FROM employees
WHERE NOT(salary>=8000 AND salary<=17000)
ORDER BY salary DESC;
练习三:查询邮箱中包含e的员工信息,并先按邮箱的字节降序,再按部门号升序
SELECT * FROM employees WHERE email LIKE '%e%' ORDER BY LENGTH(email) DESC,
department_id ASC;