MySQL_基础篇

一、概述

数据库的好处

  1. 持久化数据到本地
  2. 可以实现结构化查询,方便管理

数据库相关概念

  1. DB:数据库,保存一组有组织的数据的容器
  2. DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据
  3. SQL:结构化查询语言,用于和DBMS通信的语言

数据库存储数据的特点

  1. 将数据放到表中,表再放到库中
  2. 一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。
  3. 表具有一些特性,这些特性定义了数据在表中如何存储,类似Java中 “类”的设计。
  4. 表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似Java中的”属性”
  5. 表中的数据是按行存储的,每一行类似于java中的“对象”。

二、MySQL简介和安装

1. MySQL优点

  • 成本低:开放源码代码,可以免费试用
  • 性能高:执行速度快
  • 简单:容易安装和使用

2. MySQL 卸载和安装

卸载、安装步骤:参考地址,先自己搜索,后续补上

3. MySQL服务的启动和停止

  • 方式一:计算机——右击管理——服务
  • 方式二:右键命令行程序,通过管理员身份运行
    • net start 服务名(启动服务)
    • net stop 服务名(停止服务)

4. MySQL服务的登录和退出

  • 方式一:通过mysql自带的客户端,开始-程序中找到MySQL目录

    • 只限于root用户
  • 方式二:通过windows自带的客户端,直接进入windows自带的命令行

    • 登录:mysql 【-h主机名 -P端口号 】-u用户名 -p密码
    • 退出:exit或ctr++l+C


三、MySQL命令

1. MySQL常用命令

1.查看当前所有的数据库
show databases;
2.打开指定的库
use 库名;
3.查看当前库的所有表
show tables;
4.查看其它库的所有表
show tables from 库名;
5.查看当前所在库
select database();
6.创建表
create table 表名(
		列名 列类型,
		列名 列类型,
		...
);
7.查看表结构
desc 表名;

8.查看MySQL服务器的版本
方式一:登录到mysql服务端
select version();
方式二:没有登录到mysql服务端
mysql --version
或者
mysql -V

2. MySQL的语法规范

  • 不区分大小写,但建议关键字大写,表名、列名小写
  • 每条命令最好用分号结尾
  • 每条命令根据需要,可以进行缩进或换行(直接回车)
  • 字段可以加着重号``,也可以不加;字符常量必须加单引号’’
  • 注释
    • 单行注释:#注释文字
    • 单行注释:-- 注释文字(注意–后面有空格)
    • 多行注释:/* 注释文字 */

3. SQL的语言分类

  • DQL(Data Query Language):数据查询语言
    • select
  • DML(Data Manipulate Language):数据操作语言
    • insert 、update、delete
  • DDL(Data Define Languge):数据定义语言
    • create、drop、alter
  • TCL(Transaction Control Language):事务控制语言
    • commit、rollback

4. 数据表准备

导入脚本,或者创建表

员工表
在这里插入图片描述
部门表
在这里插入图片描述
位置表
在这里插入图片描述
工种表
在这里插入图片描述
女神表
在这里插入图片描述
男神表
在这里插入图片描述
具体sql执行脚本访问链接:https://blog.csdn.net/GongmissYan/article/details/102937816

四、DQL语言

1. 基础查询

语法:

SELECT 要查询的东西 【FROM 表名】;
  • 类似于Java中:System.out.println(要打印的东西);

特点:

  • 通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
  • 要查询的东西可以是常量值、可以是表达式、可以是字段、可以是函数

补充说明:

  • 使用sqlyog时,直接双击左侧字段,可以在查询器上直接输入完整字段,避免输入错误
  • 选中sql语句,F12可以格式化sql语句
  • 双击字段时,sqlyog会帮我们给字段加上着重号``,这个符号可以不加;加上的好处是,当某些字段名与关键字重名时,比如NAME,加上着重号标识,说明这就是个字段名

SQL举例:

查询字段

#查寻名字
SELECT last_name FROM employees;
#查询所有字段;有限制,查询得到的字段顺序与原表一致
SELECT * FROM employees;

查询常量

#查询数字常量
SELECT 100;
#查询字符常量
SELECT 'join';

查询表达式、函数

#查询表达式
SELECT 100*100;
#查询函数
SELECT VERSION();

查询的字段起别名:

  • 用处:1.便于理解;2.查询多表有重名时,别名便于区分
#给字段起别名方式一
SELECT last_name AS,first_name ASFROM employees;
#给字段起别名方式二
SELECT last_name 姓,first_name 名 FROM employees;
#如果别名是特殊符号,直接使用会被识别成其他含义,这时推荐使用""包裹别名
SELECT salary AS "out put" FROM employees;

在这里插入图片描述

去重

#去重
SELECT DISTINCT department_id FROM employees LIMIT 1;

+号作用

  • Java中
    • 运算符:连个操作数都是数值型
    • 只要有一个操作数为字符型,
  • MySQL中
    • 只有一个功能,表示运算符
      • 当+号两边均为数值型,则做加法运算
      • 当+号两边其中一方为字符型,则试图将字符型转为数值型,如果转换成功则做加法运算;如果转换失败,则字符直接等于0
      • 当+号两边其中一方只要为null,结果就是一定null
SELECT 10+90;
SELECT '10'+90;
SELECT 'join'+90;
SELECT NULL+90;

拼接字段:将查询的两个字段拼接成一个字段

SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees;

判断是否为空,如果为NULL则返回…

SELECT IFNULL(commission_pct,0) AS 奖金率,commission_pct FROM employees;

2. 条件查询

条件查询:根据条件过滤原始表的数据,查询到想要的数据

语法:

select 
	要查询的字段|表达式|常量值|函数 
fromwhere 
	条件;

条件分类:条件表达式、逻辑表达式、模糊查询

条件表达式

特点

  • 条件运算符:> < >= <= = != <>
  • 举例:salary>10000

逻辑表达式

特点

  • 逻辑运算符:
    • and(&&):两个条件如果同时成立,结果为true,否则为false
    • or(||):两个条件只要有一个成立,结果为true,否则为false
    • not(!):如果条件成立,则not后为false,否则为true
    • 举例:salary>10000 && salary<20000

案例

查询部门编号不在90-110之间,或者工资高于15000的员工信息

SELECT 
  * 
FROM
  employees 
WHERE NOT (
    department_id >= 90 
    AND department_id <= 110
  ) 
  OR salary > 15000 ;

模糊查询

like、between and、in、is null

like 特点

  • like:一般和通配符搭配使用
    • % 通配任意多个字符,包括0个字符
    • _通配任意单个字符

案例

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

SELECT * FROM employees WHERE last_name LIKE '%a%';

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

SELECT last_name,salary FROM employees WHERE last_name LIKE '__n_a%';

查询员工名中第二个字符为_的员工名(需要给_转义)

SELECT last_name FROM employees WHERE last_name LIKE '_\_%';
#也可以不使用\,而是自己指定转义符
SELECT last_name FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';

between and 特点

  • between and:在…之间
    • 可以提高语句简洁度
    • 选取的范围是闭区间,包含两个端点的值
    • 两个端点的值不可以颠倒顺序,否则查询不到结果,因为它完全等价与>=左边的值,<=右边的值

案例

查询员工编号在100-200之间的员工信息

SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 200;

in 特点

  • in:判断某字段是否属于括号内的某一项
    • 提高语句简洁度
    • 括号内的值类型必须一致,或者可以兼容,也就是可以隐式转化
    • 括号内的值必须是确定的,不支持通配符

案例

查询员工工种编号为 IT_PROT、AD_VP、AD_PRES的员工名和工种编号

SELECT * FROM employees WHERE job_id IN('IT_PROT','AD_VP','AD_PRES');

is null 特点

  • is null:用于和null进行比较
    • =或<>不能用于判断null值
    • is null和is not null可以判断null值
    • is只用于和null搭配,不能和普通常量、变量搭配

案例

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

SELECT * FROM employees WHERE commission_pct IS NULL;

同理,查询有奖金的员工为

SELECT * FROM employees WHERE commission_pct IS NOT NULL;

<=>特点

  • <=>:安全等于
    • 可以用于和null做判断,也可以和普通类型做判断
    • 缺点就是可读性比较差,不容易判断是等于还是不等于

案例

查询奖金为空的

SELECT * FROM employees WHERE commission_pct<=>NULL;

3. 排序查询

语法:

select
		要查询的东西
fromwhere 
		条件
order by 排序的字段|表达式|函数|别名 【asc|desc

特点:

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

案例:
基础用法:查询员工,按照工资降序排序

SELECT * FROM employees ORDER BY salary DESC;

添加条件:查询员工,条件为部门编号>=90,按入职时间先后排序

SELECT * FROM employees WHERE department_id>=90 ORDER BY hiredate ASC;

按表达式排序:查询员工,按年薪从高到低排序,支持按照别名排序

SELECT 
  employee_id,
  salary * 12 * (1+ IFNULL(commission_pct, 0)) 年薪 
FROM
  employees 
ORDER BY 年薪 DESC ;

按照函数排序:查询员工,按姓名长度排序

SELECT 
  LENGTH(last_name) 字节长度,
  last_name,
  salary 
FROM
  employees 
ORDER BY 字节长度 DESC ;

按照多个字段排序:先按第一个字段工资排序,然后在此基础按第二个字段员工编号排序,

SELECT 
  * 
FROM
  employees 
ORDER BY salary DESC,
  employee_id DESC ;

4. 常见函数

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

好处:

  • 隐藏了实现细节,
  • 提高代码复用性

调用:先介绍现成的函数

select 函数名(实参列表)from 表】;

分类:

  • 单行函数:如,concat,length,ifnull
  • 分组函数:做统计使用,又称为统计函数、聚合函数、组函数

单行函数

字符函数

  • concat:拼接
  • substr:截取子串
  • upper:转换成大写
  • lower:转换成小写
  • trim:去前后指定的空格和字符
  • ltrim:去左边空格
  • rtrim:去右边空格
  • replace:替换
  • lpad:左填充
  • rpad:右填充
  • instr:返回子串第一次出现的索引
  • length:获取字节个数

案例:

SELECT UPPER('join');
#姓大写,名小写,然后拼接
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 FROM employees;
#截取字符串,从索引处开始到结尾,注意SQL语言索引从1开始
SELECT SUBSTR('abcde',3) out_put;
#截取字符串,从索引处开始,截取若干个字符,而且是字符长度而非字节
SELECT SUBSTR('abcde',3,2) out_put;
#要求结果中姓名首字母大写,其他字符小写,最后用_拼接
SELECT 
  CONCAT(
    UPPER(SUBSTR(last_name, 1, 1)),
    '_',
    LOWER(SUBSTR(last_name, 2))
  ) out_put 
FROM
  employees ;
#返回淄川第一次出现的索引,如果没有则返回0
SELECT INSTR('abcde','c') AS out_put;
#去掉前后空格
SELECT TRIM('  a  ') AS out_put;
#去掉前后指定的字符
SELECT TRIM('a' FROM 'aaaaaaHelloaaaa') AS out_put;
#用指定的字符左填充,最终得到指定的字符长度
SELECT LPAD('你们好',10,'*') AS out_put;
#替换,所有符合的全部都替换
SELECT REPLACE('aaaabcd','a','k') AS out_put;

数学函数

  • round:四舍五入
  • rand:随机数
  • floor:向下取整
  • ceil:向上取整
  • mod:取余
  • truncate:截断
#四舍五入,结果为-2
SELECT ROUND(-1.55);
#四舍五入重载,保留2位小数
SELECT ROUND(1.567,2);
#向上取整,返回>=该参数的最小整数
SELECT CEIL(1.02);
SELECT CEIL(-1.02);
#向下取整,返回<=该参数的最小整数
SELECT FLOOR(-9.99);
#截断
SELECT TRUNCATE(1.66654,2);
#取模、取余,mod(a,b)最终是按照公式 a-a/b*b计算的
SELECT MOD(10,3);
SELECT 10%3;

日期函数

  • now:当前系统日期+时间
  • curdate:当前系统日期
  • curtime:当前系统时间
  • str_to_date:将字符转换成日期,Y四位年份,y两位年份
  • date_format:将日期转换成字符

在这里插入图片描述

举例:

#获取当前日期不包含时间
SELECT CURDATE();
#获取当前时间,不包含日期
SELECT CURTIME();
#可以获取指定的部分,年、月、日、消失、分钟、秒
SELECT YEAR(NOW());
SELECT YEAR(hiredate)FROM employees;
SELECT MONTH(NOW());
#日期格式的字符转为指定格式的日期
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');
#日期转为指定格式的字符
SELECT DATE_FORMAT(NOW
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值