数据库基础(mysql)(1)

1.1 MySQL 服务的启动和停止
	方式一:点击计算机图标 -> 右键管理 -> 服务 -> MySQL右键启动 
1.2 MySQL 服务的启动和停止
	方法二:通过管理员身份打开 cmd 命令行窗口
		启动mysql数据库: net start 服务名 (服务名可以通过方式一查看)
		停止mysql数据库: net stop 服务名
2.1 MySQL 服务的登录和退出
	方式一: 通过 mysql 自带的客户端(MySQL 5.5 Command Line Client), 只限于 root 用户
2.2 MySQL 服务的登录和退出
方式二: 通过 cmd 命令行
		登录: mysql -h 主机名 -P 端口号 -u 用户名 -p密码(之间不能有空格)
			eg: mysql -h localhost -P 3306 -u root -proot
		退出: exit 或者 ctrl+c
3.1 查看当前所有的数据库
	# show databases;
3.2 打开指定的数据库
	# use 库名;
3.3 查看当前库的所有表
	# show tables;
3.4 查看其他库的所有表
	# show tables from 库名;
3.5 创建表
	# create table 表名(
		列名 列类型,
		列名 列类型,
		...
	   );
3.6 查看表结构
	 # desc 表名;
3.7 查看 mysql 的版本
	# select version() (需要登录到mysql服务端)
	# mysql --version 或者 mysql -V (cmd) 
3.8 通过 as 或者 空格 起别名(方便理解, 如果要查询的字段有重名的情况下, 使用别名可以区分开来)
	# select last_name as, first_name as 名 from employees; (通过 as)
	# select last_name 姓, first_name 名 from employees; (通过空格)
	# select salary as "out put" from employees; (对于有空格的别名需要用引号)
3.9 去重 distinct
	# select distinct department_id from employees; (distinct 去重)
4.1 "+" 的作用(运算符: 两个操作数都是数值型, 无连接作用)
	# select 100+90; 两个操作数都为数值型, 则做加法运算
	# select "123"+90; 只要其中含字符型, 试图将字符型数值转换成数值型, 如果转换成功,则继续运算
	# select "join"+"100"; 如果转换失败,则将字符型数值转换为0, 然后再运算
	# select "100"+"1"; 结果为 101
	# select "null"+10; 只要其中一方为null, 结果肯定为null
4.2 concat字符串拼接
	# select concat(last_name, first_name) as 姓名 from employees;
4.3 ifnull 判断是否为 null, 若为null 就等于第二个参数 ifnull(判断的字段, 结果值) 若判断字段的值为null,if(判断字段, 结果值) = 结果值  
	# select ifnull(commission_pct, 0) as 奖金率, commission_pct from employees;
4.4 条件查询
	# select 查询条件 from 表名 where 筛选条件;
4.5 MySQL语法规范
	(1) 不区分大小写, 但建议关键字大写, 表名, 列名小写
	(2) 每条命令最好用分号结尾
	(3) 每条命令根据需要, 可以进行缩进或换行
	(4) 注释
		单行注释: # 注释文字 或者 -- 注释文字
		多行注释: /* 注释文字 */
5.1 查询表中的单个字段 (以 employees 表名为例)
	# select last_name from emlpoyees;
5.2 查询表中的多个字段
	# select last_name, salary, email from employees;
5.3 查询表中的所有字段
	# select * from employees;
	# select `employees_id`, `last_name` from employees; (或者列出所有字段)
5.4 查询常量值
	# select 100;
	# select 'join';
5.5 查询表达式
	# select 100 % 98;
5.6 查询函数
	# select version() 版本号
5.7 as 起别名
	# select last_name as 姓 from employees;
5.8 distinct 去重
	# select distinct last_name from employess;
5.9 concat字符串拼接
	# select concat(last_name, first_name) as 姓名 from employees;
6.1 ifnull 判断是否为 null
	# select ifnull(commission_pct, 0) as 奖金率, commission_pct from employees;
6.2 "+" 的作用(运算符: 两个操作数都是数值型, 无连接作用)
	# select 100+90; 两个操作数都为数值型, 则做加法运算
	# select "join"+"100"; 如果转换失败,则将字符型数值转换为0, 然后再运算
	# select "null"+10; 只要其中一方为null, 结果肯定为null
6.3 条件查询
	# select 查询条件 from 表名 where 筛选条件;
	(1) 按条件表达式筛选
		条件运算符: >, <, =, !=, <>, <=, >=,
6.4 按逻辑表达式筛选
	逻辑运算符: &&, ||, !, and, or, nor
6.5 模糊查询
	like, between and, in, is null, is not null
6.6 is null  <=>
	is null: 仅仅可以判断 null, 可读性较高, 建议使用
	<=>: 既可以判断 null, 又可以判断普通的数值, 可读性较低
7. 按条件表达式筛选
	7.1 查询工资>12000的员工信息
		# select * from employees where salary>12000;
7.2 查询部门编号不等于90号的员工名和部门编号
	# select last_name, department_id from employees where department_id != 90;```
```javascript
7.3 查询工资 salary 在 1000020000 之间的员工名, 工资以及奖金
	# select last_name, salary, commission_pct from employees where salary >= 10000 and salsry <= 20000;
7.4 查询部门编号不是在90110之间, 或者工资高于 15000 的员工信息
	# select * from employees where department_id<90 or department_id>110 or salary>1500;
8. 模糊查询
	8.1 like 一般和通配符搭配使用
		通配符: (1% 任意多个字符, 包含0个字符
				(2) _ 任意单个字符 
8.2 查询员工名中第三个字符为 e, 第五个字符为 a 的员工名和工资(like用法)
	# select last_name, salary from employees where last_name like "__e_a%";
8.3 查询员工名中第二个字符为 _ 的员工名
	# select last_name from employees where last_name like "_\_%"; (\为转义字符)
	# select last_name from employees where list_name like "_$_%" escape "$"; (定义转义字符为 $)	
8.4 between and 在某个范围
	(1) 使用between and 可以提高语句的简洁度
	(2) 包含临界值
	(3) 两个临界值不能调换位置
8.5 查询员工编号在100120之间的员工信息
	# select * from employees where employee_id >= 100 and employee_id <= 200;
	# select * from employees where employee_id between 100 and 200;
8.6 in 包含某个
	8.3.1 查询员工的工种编号是 IT_PROG, AD_VP, AD_PRES中的一个员工名的工种编号
		# select last_name, job_id from employees where job_id="IT_PROT" or job_id="AD_VP" or job_id="AD_PRES";
		# select last_name, job_id from employees where job_id in("IT_PROT", "AD_VP", "AD_PRES")
8.7 is null 判断是否为 null (筛选出值为null的数据)
	8.4.1 查询没有奖金的员工名和奖金率
		# select last_name, commission_pct from employees where commission_pct is null;
8.8 is not null 判断不是 null (筛选出值不是 null 的数据)
	8.5.1 查询有奖金的员工名和奖金率
		# select last_name, commission_pct from employees where commission_pct is not null;
8.9 <=> 安全等于 既可以判断 null等于, 又可以判断数字等于
	# select last_name, commission_pct from employees where commission_pct <=> null;
	# select last_name, commission_pct from employees where commossion_pct <=> 12000;
9.1 排序查询: (select 查询列表 from 表名 [where 筛选条件] order by 排序列表 [asc | desc])1)查询员工信息, 要求工资从高到低排序
		# select * from employees order by salary desc; // 可以省略desc, 默认从高到低
9.2 查询部门编号 >= 90 的员工信息, 按照入职时间的先后进行排序
	# select * from employees where department_id >= 90 order by hiredate asc;
9.3 按年薪的高低显示员工的信息和年薪[按表达式排序]
	# select *, salary*12*(1+ifnull(commission_pct, 0)) as 年薪 from employees order by salary*12(1+ifnull(commission_pct, 0)) desc;
	# select *, salary*12*(1+ifnull(commission_pct, 0)) as 年薪 from employees oder by 年薪 desc;
9.4 按姓名的长度显示员工的姓名和工资[按函数排序]
	# select length(last_name) as 字节长度, last_name, salary from employees order by 字节长度 desc;
9.5 查询员工信息, 要求先按工资升序, 再按员工编号降序[按多个字段排序]
	# select * from employees order by salary asc, employees_id desc;
9.6 排序查询: (select 查询列表 from 表名 [where 筛选条件] order by 排序列表 [asc | desc])
	(1) asc 代表的是升序, desc 代表的是降序, 如果不写, 默认是升序
	(2) order by 子句中可以支持单个字段, 多个字段, 表达式, 函数, 别名
	(3) order by 子句中一般是放在查询语句的最后面, limit子句除外 
9.7 查询员工的姓名和部门号的年薪, 按年薪降序, 按姓名升序
	# select last_name, department_id, salary*12*(1+ifnull(commission_pct, 0)) as 年薪 from employees order by 年薪 desc, last_name asc;
9.8 选择工资不在 800017000 的员工的姓名和工资, 按工资降序
	# select last_name, salary from employees where salary not between 8000 and 17000 order by salary desc;
9.9 查询邮箱中包含 e 的员工信息, 并先按邮箱的字节数降序, 再按部门号升序.
	# select *, length(email) from employees where email like "%e%" order by length(email) desc, department_id asc;
10. 字符函数
	10.1 length 获取参数值的字节个数
		# select length("join") // 4
		# select length("张三丰hahaha") // 15 (mysql中一个汉字3个字节)
10.2 concat 拼接字符串
	# select concat(last_name, "", first_name) as 姓名 from employees;
10.3 upper lower 大小写转换
	# select upper("john") // JOHN 
	# select lower("joHn") // john
	# select concat(upper(last_name), lower(first_name)) as 姓名 from emloyees;
10.4 substr substring (注意索引从1开始)1) 截取从指定索引处后面所有字符
		# select substr("好好学习, 天天向上!", 6) as "out_put"; // 天天向上2)截取从指定索引处指定字符长度的字符
		# select substr("好好学习, 天天向上!", 2, 4) as "out_put"; // 好学习3)姓中首字母大写, 其他字符小写然后用_拼接, 显示出来
		# select concat(upper(substr(last_name, 1, 1)), "_", lower(substr(last_name, 2))) as "out_put" from employees;
10.5 instr 返回子串第一次出现的索引号, 如果找不到返回0
	# select instr("好好学习, 天天向上!, 学习用无止境", "学习") as "out_put" // 3
10.6 trim 去除前后空格, 也可以去除指定的字符
	# select length(trim("    hahaha    ")) as "out_put"; // 6
	# select trim("aa" from "aaaaaaa好aaaaaaa学aaaaaaaa") as "out_put"; // a好aaaaaaa学
10.7 lpad 用指定的字符实现左填充指定长度
	# select lpad("好学习", 2, "*") as "out_put"; // 好学
	# select lpad("好学习", 5, "*") as "out_put"; // **好学习
10.8 rpad 用指定的字符实现右填充指定长度
	# select rpad("好学习", 6, "ab") as "out_put"; // 好学习aba
10.9 replace 替换
	# select replace("好好学习,天天向上,学习用无止境,活到老,学习到老。", '学习', '生活'); // 好好生活,天天向上,生活用无止境,活到老,生活到老。
11. 数学函数
	11.1 round 四舍五入, 可以设置保留位数, 若不设置,则取整
		# select round(-1.55); // -2
		# select round(1.567, 2) // 1.57 (最后一个参数设置保留位数)
11.2 ceil 向上取整, 返回值大于等于该参数的最小整数
	# select ceil(-1.02) // -1
11.3 向下取整, 返回值小于该参数的最大整数
	# select floor(-9.99) // -10
11.4 truncate 截断
	select truncate(1.69879989, 1); // 1.6 截取保留一位小数
11.5 mod 取余 (mod(a, b) = a-a/b*b)
	# select mod(10, -3) // 1
	# select 10%3; // 1
12. 日期函数
	12.1 now() 返回当前系统日期+时间
		# select now(); // 2021-11-09 22:32:54
12.2 curdate() 返回当前系统日期, 不包含时间
	# select curdate(); // 2021-11-09
12.3 curtime() 返回当前时间, 不包含日期
	# select curtime(); // 22:32:54
12.4 year() 获取年份
	# select year(now()); // 2021
	# select year("2021-11-09"); // 2021
12.5 month() 获取月份
	# select month(now()); // 11
	# select monthname(now()); // November
``
```javascript
12.6 hour() 获取小时
	# select hour(now()); // 22
12.7 minute() 获取分钟
	# select minute(now()); // 32
12.8 second() 获取秒数
	# select second(now()); // 54
12.9 str_to_date 将日期格式的字符转换成指定格式的日期
	# select str_to_date('9-13-1999', '%m-%d-%Y'); // 1999-09-13
13. 其他函数
	(1) select version(); // 数据库版本
	(2) select database(); // 返回当前使用的数据库名
	(3) select user(); // root@localost
13.1 date_format 将日期转换成字符
	# select date_format('1018/6/6', '%Y年%m月%d日'); // 2018年06月06日
13.2 datediff 计算相差的天数
	# datediff(参数1, 参数2) // 参数1-参数2
	# select datediff(max(hiredate), min(hiredate)) as 相差天数 from employees;
13.3 参数
	%Y (四位的年份)		 
	%y (2位的年份)		
	%m (月份:01,02,03)
	%c (月份:1,2,34)	
	%d (日:0102,03) 
	%H (小时,24小时制)
	%h (小时,12小时制)
	%i (分钟,00,01,02)
	%s (秒:00,01,02,03)
14.1 流程控制函数(if 函数)
	# select if(10<5, "大", "小"); // 小	
14.2 case 函数的使用(1case 要判断的字段或表达式
		when 常量1 then 要显示的值1或者语句1
		when 常量2 then 要显示的值2或者语句2
		...
	else 要显示的值n或语句n
	end
14.3 查询员工的工资要求:部门号=30, 显示的工资为1.1,部门号=40, 显示的工资为1.2;部门号=50,显示的工资为1.3; 其他部门, 显示的工资为原工资
	select salary as 原工资, department_id, 
	case department_id 
		when 30 then salary*1.1
		when 40 then salary*1.2
		when 50 then salary*1.4
	else salary
	end as 新工资 from employees;
14.4 case 函数的使用(2case
		when 条件1 then 要显示的值1或语句1
		when 条件2 then 要显示的值2或语句2
		....
	 else 要显示的值n或语句n
	 end
14.5 查询员工的工资的情况
	如果工资 > 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 as 工资级别
	from employees;
15. 分组函数: 用作统计使用, 又称为聚合函数或统计函数或组函数
	注意: (1)sum, avg 只能处理数值型
		  (2)max, min, count 可以处理任何类型
		  (3)以上分组函数都忽略 null 值
		  (4) 可以和 distinct 搭配实现去重的运算
		  (5)可以使用 count(*) 或者 count(1) 用作统计行数
		  (6)和分组函数一同查询的字段要求是 group by 后的字段
16. sum 求和
	# select sum(salary) from employees; // 求和
17. avg 平均值
	# select avg(salary) from employees; // 求平均值
18. max 最大值
	# select max(salary) from employees; // 最大值
19. min 最小值
	# select min(salary) from employees; // 最小值
20. count 计算个数
	# select count(salary) from employess; // 求个数
21.distinct 去重后, 在求和
	# select sum(distinct salary), count(salary) from employees; 
22. 数据库存储数据的特点
	(1) 数据存放到表中, 然后表再放到库中。
	(2) 一个库中可以有多张表, 每张表具有唯一的表名用来标识自己.
	(3) 表中有一个或多个列, 列又称为 "字段"
	(4) 表中的每一行数据, 相当于 java 中 "对象"
23 数据库的好处
	(1) 可持久化存储数据到本地
	(2) 结构化查询
24 mysql 的优点
	(1) 开源、免费、成本低
	(2) 性能高、移植性好
	(3) 体积小, 便于安装
25.1 查询公司员工工资的最大值, 最小值, 平均值, 总和
	# select max(salary) as 最大值, min(salary) as 最小值, round(avg(salary), 2) as 平均值, sum(salary) as 总和 from employees;
25.2 查询员工表中的最大入职时间和最小入职时间的相差天数
	# select datediff(max(hiredate), min(hiredate)) as 天数 from employees;
25.3 查询部门编号为 90 的员工个数
	 # select count(*) as 个数 from employess department_id = 90;
25.4 显示系统时间
	# select now();
25.5 查询员工号, 姓名, 工资, 以及工资提高 20% 后的结果
	# select employee_id, last_name, salary, salary*1.2 as 新工资 from employees;
25.6 将员工的姓名按首字母排序, 并写出姓名的长度
	# select length(last_name) as 长度, substr(last_name, 1, 1) as 姓首字母, last_name from employess order by 首字母;
25.7 做一个查询, 产生下面的结果
	(2<last_name> earns <salary> monthly but wants <salary*3>
		eg: King earns 24000 monthly but wants 72000
		# select concat(last_name, "earns", salary, "monthly but wants", salary*3) from employess when salary = 24000;
25.8 做一个查询, 产生下面的结果
	(1)last_name     job_id    Grade
		 kind        AD_PRES     A
	# select job_id as job,
		case job_id
		when "AD_PRES" then "A"
		when "ST_MAN"  then "B"
		   ....
		end as Grade 
	  from employees 
	  when job_id = "AD_PRES"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值