数据库MySQL

数据库介绍

DB:数据库 (database): 存储数据的"仓库"。它保存了一系列有组织的数据。
DBMS: 数据库管理系统 (Database Management System),又称为数据库软件(产品),用于管理 DB 中的数据。数据库是通过 DBMS 创建和操作的容器
SQL: 结构化查询语句(Structure Query Language)(用于和 DBMS 通信的语言): 专门用来与数据库通信的语言。

SQL的优点:
	1. 不是某个特定数据库供应商专有的语言,几乎所有 DBMS 都支持 SQL
	2. 简单易学
	3. 虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
	
理解:	
DBMS(管家) -> 管理(SQL) -> DB(文件柜)

DBMS分为两类:
	-基于共享文件系统的 DBMS(Access)
	-基于客户机-服务器的 DBMS(MySQL、Oracle、SqlServer)
	
MySQL下载地址: http://dev.mysql.com/downloads/mysql	
提示: 安装失败后,尝试把目录内 -> bin目录下 MySQLInstanceConfig.exe 文件双击后重新配置下。 

cmd -> 管理员启动   右击-计算机(此电脑)-左键管理-服务(服务和应用程序) 找到数据库名称 mysql57(然后能够启动和关闭)
数据库的启动: net start mysql57 (启动服务)
数据库的关闭: net stop mysql57 (停止服务)

MySQL 服务的登录和退出
	方式一:通过 windows 自带的客户端
	登录:
		【】: 可选项
		mysql:【-h主机名 -p端口号】 -u用户名 -p密码
		mysql -h localhost -P 3306 -u root -p123456
		命令失败原因可能是环境变量没有配置好
			右击-计算机-属性-高级系统设置-高级-环境变量-Path-编辑-将 C:\Program 				Files\MySQL\MySQL Server 5.7\bin 放到最前面
	退出:
    	exit 或 ctrl+c

MySQL的常见命令
	1.查看当前所有的数据库
		show databases;
	2.打开指定的库
    	use 库名
    3.查看当前库的所有表
    	show tables;
    4.查看其它库的所有表
    	show tables from 库名;
    5.创建表
    	create table 表明(
            
            列名 列类型
            列明 列类型
            ...
            
        );
    6.查看表结构
    	desc 表明;
    7.查看服务器的版本
    	方式一: 登录到 mysql 服务端
    		select version();
    	方式二: 没有登陆到 mysql 服务端
        	mysql --version
        	或 
        	mysql --V
MySQL 的语法规范
	1. 不区分大小写,但建议关键字大写,表明、列名小写
	2. 每条命令最好用分号结尾
	3. 每条命令根据需要,可以进行缩进 或 换行
	4.注释
		单行注释: #注释文字
		单行注释: -- (前有空格)注释文字
		多行注释: /* 注释文字 */
# 进阶1:基础查询
/*
语法:
select 查询列表 from 表明;

类似于:System.out.println(打印东西);
特点:
	1.查询列表可以是:表中的字段、常量值、表达式、函数
	2.查询的结果是一个虚拟的表格
*/

USE ssh_jpkcw_sys;

#1.查询表中的单个字段
	SELECT userName FROM t_admin;

#2.查询表中的多个字段
	SELECT `userName`,`userPw` FROM t_admin;

#3.查询表中的所有字段
	SELECT * FROM t_admin;
#或者
SELECT
	`userId`,
	`userName`,
	`userPw`
FROM
	t_admin;
说明:``(着重号是用来区分字段和关键字的,加``表示字段)	

#4.查询常量值
SELECT 100;
SELECT 'join';	

#5.查询表达式
SELECT 100%98;

#6.查询函数
SELECT VERSION();

#7.起别名
/*
	① 便于理解
	② 如果要查询的字段有重名的情况,使用别名可以区分开来
*/
# 方式一:使用 as
SELECT 100%98 AS "结果";# 别名用 "" 括起来
SELECT userName AS 用户,`userPw` AS 密码 FROM t_admin;# 别名也可以不用 "" 括起来,但是最好括起来

# 方式二:是以哦那个空格
SELECT userName 用户, userPw 密码 FROM t_admin;

# 案例:查询 userPw,显示结果为 out put
SELECT userPw AS "out put" FROM t_admin;	

#8.去重
#案例:查询员工表中涉及到的所有的部门编号
SELECT DISTINCT `password` FROM `user`;

#9.+号的作用
/*
	Java 中的 + 号:
	①:运算符,两个操作数都为数值型
	②:连接符,只要有一个操作数为字符串
	
	mysql中的+号:
	仅仅只有一个功能:运算符
	
	select 100+90; 两个操作数都为数值型,则做加法运算
	select '123'+90; 只要其中一方为字符型,试图将字符型数值转换成数值型
			 如果转换成功,则继续做加法运算
	select 'john'+90 如果转换失败,则将字符型数值转换成0
	
	select null+10; 只要其中一方为null,则结果肯定为null 
*/
#案例:查询员工名和姓连接成一个字段,并显示为 姓名
SELECT 
	CONCAT(last_name,first_name) AS 姓名
FROM
	NAME;
	
	
# 显示表name的结构,并查询其中的全部数据
DESC NAME;
SELECT * FROM NAME;

# 显示出表name的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
SELECT 
	IFNULL(money,0) AS 奖金,
	money
FROM
	NAME;
#---------------------------------------------------------------
SELECT 
	CONCAT(`last_name`,`first_name`,IFNULL(money,0)) AS out_put
FROM
	NAME;
# 进阶2:条件查询
/*
	语法:
		select
			查询列表	③
		from	
        	表名		①
        where
        	筛选条件;  ②	
    分类:
    	一、按条件表达式筛选
    		条件运算符:> < = != <> >= <=
    	二、按逻辑表达式筛选
        	逻辑运算符:
        	作用:用于连接条件表达式
        	&&和and:两个条件都为 true,结果为 true,反之为 false
        	||或or:只要有一个条件为 true,结果为 true,反之为 false
        	!或not:如果连接的条件本身为false,结果为true,反之为false
        		&&  ||  !
        		and or  not
        三、模糊查询
        	like
        	between and
        	in
        	is null
*/
#一、按条件表达式筛选
#案例1:查询工资 > 12000 的员工信息
    SELECT
        *
    FROM
        NAME
    WHERE money>12000;

    #案例2:查询部门编号不等于5的员工名和部门编号
    SELECT
        `first_name`,
        `department_id`
    FROM
        `name`
    WHERE
        `department_id`<>5;
#二、按逻辑表达式筛选
#案例1:查询工资在 10000 到 20000 之间的员工名、工资以及奖金
    SELECT 
        CONCAT(last_name,first_name) AS 姓名,
        money,
        `department_id`
    FROM
        NAME
    WHERE
        money >= 10000 AND money <= 20000;
	
#案例2:查询部门编号不是在 90 到 110 之间,或者工资高于 14000 的员工信息
    SELECT 
        *
    FROM 
        NAME
    WHERE
        NOT(`department_id` >= 90 AND `department_id` <= 110) OR money > 14000;
	
#三、模糊查询
/*
	like
	特点:
		①一般和通配符搭配使用
			通配符:
				%:任意多个字符,包含0个字符
				_:任意单个字符
	between and
	in 
	is null | is not null
*/
#1.like
	#案例1:查询员工名中包含字符a的员工信息
	SELECT
		*
	FROM
		NAME
	WHERE 	
		last_name LIKE '%a%';#字符型的值必须用单引号('')括起来
		
	#案例2:查询员工名中第三个字符为,第五个字符为的员工名和工资
	SELECT
		`last_name`,
		`money`
	FROM
		`name`
	WHERE 
		`last_name` LIKE '__n_l%';
		
	#案例3:查询员工名中第二个字符为_的员工名
	SELECT
		last_name
	FROM
		NAME
	WHERE
		#last_name like '_\_%';
		#ESCAPE 指定 $ 为转义字符
		last_name LIKE '_$_%' ESCAPE '$';#建议使用该转义字符

#2.between and
/*
	①使用 between and 可以提高语句的简洁度
	②包含临界值
	③两个临界值不要调换位置
*/
	#案例1:查询员工编号在 100 到 120 之间的员工信息
	SELECT
		*
	FROM
		`name`
	WHERE	
		`department_id` >= 100 AND `department_id` <= 120;
	#-----------------------------------------------------------
	SELECT
		*
	FROM
		`name`
	WHERE	
		`department_id` BETWEEN 100 AND 120;
		
#3.in
/*
含义:判断某个字段的值是否属于 in 列表中的某一项
特点:
	①使用 in 提高语句简洁度
	②in 列表的值类型必须一致或兼容
*/
	#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES 中的一个员工名和工种编号
	SELECT 
		last_name,
		job_id
	FROM
		NAME
	WHERE
		job_id = 'IT_PROG' OR job_id = 'AD_VP' OR JOB_ID = 'AD_PRES';
	#---------------------------------------------------------------------
	SELECT
		last_name,
		job_id
	FROM
		NAME
	WHERE
		job_id IN('IT_PROG','AD_VP','AD_PRES');# in 相当于 = 
		
#4.is null
/*
	=或<>不能用于判断 null 值
	is null 或 is not null 可以判断 null 值
*/
	#案例1:查询没有奖金的员工名和奖金率
	SELECT 
		last_name,
		commission_pct
	FROM
		NAME
	WHERE
		commission_pct IS NULL;
	#案例2:查询有奖金的员工名和奖金率
	SELECT 
		last_name,
		commission_pct
	FROM
		NAME
	WHERE
		commission_pct IS NOT NULL;
	#-------------------错误示范 is 和 null 是搭配使用的-----------------------------
	SELECT 
		last_name,
		commission_pct
	FROM
		`name`
	WHERE
		`money` IS 12000;	
	
# 安全等于 <=>
#案例1:查询没有奖金的员工名和奖金率
    SELECT
        last_name,
        commission_pct
    FROM
        NAME
    WHERE
        commission_pct <=> NULL;

    #案例2:查询工资为 12000 的员工信息
    SELECT
        last_name,
        money
    FROM
        NAME
    WHERE
        money <=> 12000;

    #is null pk <=> 
    IS NULL:仅仅可以判断 NULL 值,可读性较高,建议使用
    <=>    :既可以判断 NULL 值,又可以判断普通的数值,可读性较低	
	
# 查询员工号为 176 的员工的姓名和部门号和年薪
    SELECT
        `last_name`,
        `department_id`,
        `money`*12(1+IFNULL(`commission_pct`,0)) AS 年薪
    FROM
        NAME;
测试:
	1.查询工资大于 12000 的员工姓名和工资
	2.查询员工号为 176 的员工的姓名和部门号和年薪
	3.选择工资不在 500012000 的员工的姓名和工资
	4.选择在 2050 号部门工作的员工姓名和部门号
	5.选择公司中没有管理者的员工姓名及 job id
	6.选择公司中有奖金的员工姓名,工资和奖金级别
	7.选择员工姓名的第三个字母是 a 的员工姓名
	8.选择姓名中字母 a 和 e 的员工姓名
	9.显示出表 employees 表中 FIRST NAME 以'e'结尾的员工信息
	10.显示出来 employees 部门编号在 80-100 之间的姓名、职位
	11.显示出来 employees 的 manager_id 是 100,101,110 的员工姓名、职位
		
测试题
	一、查询没有奖金,且工资小于 18000 的salary,last_name
		SELECT salary,last_name
		FROM employees
		WHERE commission_pct IS NULL
		AND salary < 18000;
		
	二、查询 employees 表中,job_id 不为 'IT' 或者 工资为 12000 的员工信息
		SELECT *
		FROM employees
		WHERE job_id <> 'IT'
		OR salary = 12000;
		
	三、查看部门 departments 表的结构,查询效果如下
	FIELD 		TYPE 		NULL 		KEY 		DEFAULT 	Extra
	department_id	INT(4)		NO 		PRI 		NULL 		AUTO_INCREMENT
	department_name VARCHAR(3)	YES				NULL
	manager_id      INT(6)		YES				NULL
	location_id     indext(4)		YES 		NULL 		NULL
		命令:DESC departments;
	
	四、查询部门 departments 表中涉及到了那些位置编号
		SELECT DISTINCT location_id
		FROM departments;
		
	五、经典面试题:
		试问:SELECT * FROM employees;SELECT * FROM employees WHERE commission_pct LIKE '%%' AND last_name LIKE '%%';
		结果是否一样?并说明原因
			不一样!
			如果判断的字段有 NULLSELECT * FROM employees;(下面包含所有字段)
			SELECT * FROM employees WHERE commission_pct LIKE '%%' OR last_name LIKE '%%' OR employee_id LIKE '%%';
			一样	
            
一、数据库的好处
	1. 可以持久化数据到本地
	2.结构化查询
二、数据库的常见概念(重点)
	1、DB:数据库,存储数据的容器
	2、DBMS: 数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理 DB
	3SQL: 结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言
三、数据库存储数据的特点
	1、数据库存放到表中,然后表再放到库中
	2、一个库中可以有多张表,每张表具有唯一的表名用来表示自己
	3、表中有一个或多个列,列又称为"字段",相当于java中的"属性"
	4、表中的每一行数据,相当于java中的"对象"
常见的数据库管理系统
	mysql、oracle、db2、sqlserver
	
MySQL的背景
	前身属于瑞典的一家公司,MySQL AB
	08年被 sun 公司收购
	09年 sun 被 oracle 收购
MySQL的优点
	1.开源、免费、成本低
	2.性能高、移植性也好
	3.体积小,便于安装
MySQL的安装	
	属于 c/s 架构的软件,一般来讲安装服务端
	企业版
	社区版
MySQL服务的启动和停止
	方式一:通过命令行
		net start 服务名
		net stop 服务名
	方式二:计算机--右击--管理--服务	
MySQL服务的登录和退出
	登录:mysql【-h 主机名 -P 端口号】-u 用户名 -p密码
	退出:exit 或 ctrl+C
	
DQL语言
基础查询
    一、语法
        select 查询列表
        from 表名:
    二、特点
        1.查询列表可以是字段、常量、表达式、函数、也可以是多个
        2.查询结果是一个虚拟表
    三、示例
        1.查询单个字段
            select 字段名 from 表名;
        2.查询多个字段
            select 字段名,字段名 from 表名;
        3.查询所有字段
            select * from 表名
        4.查询常量
            select 常量值;
            注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
        5.查询函数
            select 函数名(实参列表)
        6.查询表达式
            select 100/1234;
        7.起别名
            ① as
            ② 空格
        8.去重
            select distinct 字段名 from 表名;
            # 错误写法
            # select distinct a,b from 表名;
            select distinct a from 表名;
        9.+
            作用:做加法运算
            select 数值+数值:直接运算
            select 字符+数值:先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
            select null+;结果都是 null
        10.【补充】concat 函数
            功能:拼接字符
            select concat(字符1,字符2,字符3,...);
        11.【补充】ifnull 函数
            功能:判断某字段或表达式是否为 null,如果为 null 返回指定的值,否则返回原来的值
            select ifnull(connission_pct,0) from employees;
        12.【补充】isnull函数
            功能:判断某字段或表达式是否为 null,如果是,则返回1,否则返回0
            select isnull(commission_pct),commission_pct from employees;
            
条件查询
	一、语法
		select 查询列表
		from 表名
		where 筛选条件
	二、筛选条件的分类
    	1.简单条件运算符
    		>  <  =  <>  !=  >=  <=  <=> 安全等于
    	2.逻辑运算符
            &&  and
            ||  or
            !   not
        3.模糊查询
        	like:一般搭配通配符使用,可以判断字符型或数值型
        		 通配符:%任意多个字符,_任意单个字符
        	between and
        	in
        	in null / in not null: 用于判断 null 值
        	
        				普通类型的数值		null值		可读性
        	is null		 ×				 √			  √	
            <=>			 √				 √			  ×	   	
#进阶3:排序查询
/*
引入:
	select * from employees;
语法:
	select 查询列表			③
	from 表				①
	【where 筛选条件】		②
	order by 排序列表 【asc | desc】④
特点:
	1.asc代表的是升序,desc代表的是降序
	如果不写,默认是升序
	2.order by子句中可以支持单个字段、多个字段、表达式、函数、别名
	3.order by子句一般是放在查询语句的最后面,limit子句除外
*/
#案例1:查询员工信息,要求工资从高到底排序
	SELECT * FROM NAME ORDER BY money DESC;
	SELECT * FROM NAME ORDER BY money ASC;#默认的是升序
	# 或者
	SELECT * FROM NAME ORDER BY money;#默认的是升序
#案例2: 查询部门编号 >= 90 的员工信息,按入职时间的先后进行排序【添加筛选条件】
	SELECT * 
	FROM NAME 
	WHERE department_id >= 90
	ORDER BY hiredate ASC;
#案例3: 按年薪的高低显示员工的信息和 年薪【按表达式排序】
	SELECT * ,money*12*(1+IFNULL(commission_pct,0)) 年薪
	FROM NAME
	ORDER BY money*12*(1+IFNULL(commission_pct,0))DESC;
#案例4:按年薪的高低显示员工的信息和年薪【按别名排序】
	SELECT * ,money*12*(1+IFNULL(commission_pct,0)) 年薪
	FROM NAME
	ORDER BY 年薪 DESC;
#案例5:按姓名的长度显示员工的姓名和工资【按函数排序】
	SELECT LENGTH(last_name) 字节长度,last_name,money
	FROM NAME
	ORDER BY LENGTH(last_name) DESC;
#案例6:查询员工信息,要求先按工资升序,再按员工编号排序【按多个字段排序】
	SELECT *
	FROM NAME
	ORDER BY money ASC,department_id DESC;
测试
	1.查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
		SELECT last_name,department_id,money*12*(1+IFNULL(commission_pct,0)) 年薪
		FROM NAME
		ORDER BY 年薪 DESC,last_name ASC;
		
	2.选择工资不在 800017000 的员工的姓名和工资,按工资降序。
		SELECT last_name,money
		FROM NAME
		WHERE money NOT BETWEEN 8000 AND 17000
		ORDER BY money DESC;
		
	3.查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序
		SELECT *,LENGTH(email)
		FROM NAME
		WHERE email LIKE '%e%'
		ORDER BY LENGTH(email) DESC,department_id ASC;
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值