mysql学习

mySQL

优点
  1. 开源,免费,成本低
  2. 性能高,移植性也好

一、基础介绍

1. DB
  1. 数据库:存储数据的仓库,它保存了一系列的有组织的数据的
2. DBMS
  1. 数据库管理系统: 数据是通过DBMS创建和操作的容器
  2. -基于共享文件系统的DBMS
  3. -基于客户端的–服务器的BDMS
3.SQL
  1. 结构化查询语言:专门用来与数据库通信的语言
  2. 所有的数据库都DBMS都支持SQL
  3. 学习简单
  4. 可以操作高级的数据库操作

二、启动和停止服务

  • 以管理员身份启动cmd
 1. 启动
   net stop  mysql80
  2. 停止
  net start mysql80

三、登录服务

  //复杂写
   -h主机名
   -P域名
   -u 用户名
   -p密码
   mysql -h localhost() -P 3306(域名) -u root(用户名) -proot(密码)
   
   //简写
   mysql -u root -proot

三、简单命令

  1. 查看所有数据库
   show databases;

2.查看哪个库

   use test;
  1. 查看哪些表
  show tables;
  //查看表所在的库 
  select database();
  //查其他库的所有表
  show tables from 库名;
  1. 创建表
   create tables 表名(
    列名:类型,
	列名:类型,
   )
  1. 查看表结构
desc 表名

四、SQL语法规范

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

五、常用的SQL命令

1、基础查询

  • 查询前先执行在以下代码确定查询那个库
//使用哪个库
USE `库名`
//查询语法
selct '查询列表' from '表名'
1. 查询表中单个字段
//user表中查询id的数据
SELECT id FROM `user`
2. 查询表中的多个字段
//user表中查询id,username字段,用逗号隔开
SELECT id,username FROM `user`
3. 查询所有字段
//user表中查询所有字段用 *号
SELECT * FROM `user`
4. 查询常量值
SELECT 100
5. 查询表达式
SELECT 100%98   加减乘除模
6. 查询函数
 SELECT VERSION()
7. 起别名
  • 如果别名出现关键字或者空格需要用单引号引起来
//AS后面的就是起的别名 username别名名字 
SELECT username AS 名字 FROM `user`  //方式一
//直接用空格
SELECT username 名字 FROM `user`
8. 去重
//SELECT 后面 加 DISTINCT
SELECT DISTINCT age FROM `user`
9. + 号的作用
  • mysql中+号仅仅一个功能:运算符
  • 如果拼接两个字符 需要用到CONCAT()方法,如果有一个拼接的字符为null,返回的所有都是null
SELECT CONCAT(username,passworde) FROM `user`

2、条件查询

  • 条件查询常用语法
SELECT '列表' FROM `表名` WHERE '条件'
  • 分类
   1.按条件表达式筛选
   2.条件运算符:> ,< ,= ,!=, <,> ,>= , <=
   3.逻辑运算符 &&||,! , and ,or, not
   4.模糊查询 like, between and, id ,is null
1. 按条件运算符筛选查询案例
//查询表中age=100
SELECT * FROM `user` WHERE age=100
2. 逻辑运算符查询案例 AND(&&)
//查询表中 type=0并且age>100数据 用AND连接
SELECT type,age FROM `user`  WHERE type=0 AND age>100
//查询表中 type=0或者age>100数据 用OR连接
SELECT type,age FROM `user`  WHERE type=0 OR age>100
// NOT取反
SELECT type,age FROM `user`  WHERE NOT(type=0 OR age>100)
3. 模糊查询
  1. like字段
  like字段一般和通配符搭配
  % 任意多个字符
  _ 任意单个字符
// 查询字段用引号引起来
//然后后%%代表任意一个字符
SELECT * FROM `表名` WHERE 字段 LIKE '%1%'
  1. BETWEEN AND案例
//查询两个字段之间 包含临界值
SELECT * FROM `user` WHERE age BETWEEN 100 AND 1000
  1. in案例
//in语法查询满足age=100,age=103的所有人
SELECT age,username FROM `user` WHERE age IN('100','103')
  1. is null案例
//因为查询字段不能 =NULL
//所以提供字段is null方法
//查询所有用户没有密码的 IS NULL
SELECT age,password FROM `user` WHERE password IS NULL
//有密码的  NOT NULL
SELECT age,password FROM `user` WHERE password IS NOT NULL
  1. 安全等于
//查询所有用户没有密码的 <=>
SELECT age,password FROM `user` WHERE password <=>NULL

6 . 查询字段为如果为NULL,所有的数据都不会返回所以添加字段 IFNULL(‘字段名’,默认值)

SELECT age,IFNULL(username,0) FROM `user` WHERE age IS NOT NULL

3、 排序查询

  • ORDER BY语句放在后面
//排序查询关键字 ORDER BY 字段 DESC
// DESC降序 ASC升序  默认升序
SELECT * FROM `user` ORDER BY age DESC
//多个字段
SELECT * FROM `user` ORDER BY username,age DESC

4、常见函数

select  函数名(实参列表)
1、 字符函数

//# LENGTH获取字段的字节数
SELECT LENGTH('Josn')

//# CONCAT 拼接字符串
SELECT CONCAT(str1,str2,...)

//# UPPER大写  LOWER小写
SELECT LOWER('AD')

//截取字符串SUBSTR
SELECT SUBSTR('str' FROM 1 FOR 1)

//INSTR返回某个字符在字符串中的起始索引 
SELECT INSTR('张无忌dasd','d')

//LPAD用指定的字符填充
SELECT LPAD('殷素素',10,'*') out_put   //

//左填充
SELECT RPAD 

//REPLACE替换
SELECT REPLACE('张无忌','无忌','三丰') //张三丰
2、数学函数
//四舍五入ROUND
SELECT ROUND(1.55,保留位数)
//向上取整CEIL
SELECT CEIL(1.2)
//向下取整FLOOR
SELECT FLOOR(1.5)
//保留小数 TRUNCATE
SELECT TRUNCATE(1.65,1)
//取余类似 10%3
SELECT MOD(10,3)
//获取随机数 
SELECT rand()  //默认返回0~1之间的数    
3.日期函数

1.返回当前的系统日期+时间
SELECT NOW()

2.返回当前的日期不包含时间
SELECT CURDATE()

3.返回当前时间
SELECT CURRENT_TIME()

4.返回年月日
SELECT YEAR(NOW()) 
SELECT MONTH(NOW())
SELECT DAY(NOW())

//将日期格式的字符转换成指定格式的字符
SELECT STR_TO_DATE('1992-2-1','%Y-%c-%d')  //1992-02-21
//将日期格式指定格式的字符
SELECT DATE_FORMAT('2019-02-10','%Y年%m月%d日')  //2019年02

//计算两个时间的日期时间
SELECT DATEDIFF('2019-01-21','2018-12-12')  //4010
  • 时间格式字符表
    在这里插入图片描述
4、其他函数
//查询当前版本
SELECT VERSION()
//查询当前库
SELECT DATABASE()
//查询当前用户
SELECT USER()
5、流程控制函数
//# 1. if函数
if(条件表达式,表达式1,表达式2)成立返回1,不成立返回2
case 变量
when 常量1 then 值
when 常量2 then 值
else 值
end
SELECT IF(10>5,'大 ','小')  //大
// # 2. case 函数 when 类似 swich case使用
SELECT age,
CASE age
	WHEN 100 THEN age*1.5
	ELSE age
END
FROM `user`
6.分组函数
  • 和分数函数一同查询的字段有限制
  • sum和avg一般处理数值型
  • 所有的分组函数都忽略null值
//SUM求一个字段的和
SELECT SUM(age) FROM `user`

//AVG平均值
SELECT AVG(age) FROM `user`

//MIN最小值
SELECT MIN(age) FROM `user`

//MAX最小值
SELECT MAX(age) FROM `user`

//COUNT个数
SELECT COUNT(age) FROM `user`

//统计个数
SELECT COUNT(*) FROM `user`

//统计个数或者这样写
SELECT COUNT(1) FROM `user`

//可以和DISTINCT 去重以前用
SELECT SUM(DISTINCT age) FROM `user`
7.分组查询
    //GROUP BY 按照哪个字段分组
    
    //案例1 按照type分组,查询每个组的最大值
	SELECT MAX(age),type
	FROM `user`
	GROUP BY type
	
	//案例2 按照type字段分组,查询每个分组的个数
	SELECT COUNT(age),type
	FROM `user`
	GROUP BY type
    
    //案例3 按照type字段分组,查询在id='1221'条件下每个分组的个数
    SELECT COUNT(age),type
	FROM `user`
	WHERE id='1221'
	GROUP BY type
   
   //案例4 按照type字段分组,查询个数并且id不是null并且每个分组的个数>2
   //如果再有条件,用到一个新字段 HAVING 
    SELECT COUNT(age),type
	FROM `user`
	WHERE id IS NOT NULL
	GROUP BY type
	HAVING COUNT(age)>2
   
   //案例5.多个字段分组
    SELECT COUNT(age),type,id
	FROM `user`
	GROUP BY type,id
	
	//案例6.分组函数升序,降序
	SELECT COUNT(age),type
	FROM `user`
	GROUP BY type
	ORDER BY COUNT(age)
8.连接查询
//含义:又称多表查询,当查询字段来自多个表时,就会连接查询
//笛卡尔乘积现象:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接
//如何解决:添加连接条件
  1. 分类

按年代分
1.sql192标准:仅支持内连接
2.sql.99标准:支持内外连接(左外+右外)+交叉连接

按功能分类
1.内连接分为:等值连接、非等值连接、自连接
2.外连接:左连接、右连接、全连接
3、交叉连接

  1. 等值连接
//查询girls中的字段username和boys中的字段usernamen,当两个表的id 相同时返回数据的交集部分
   //可以用AS字段为表起别名
   //可以用AND字段加筛选条件
	SELECT g.username,b.username 
	FROM boys AS b,girls AS g
	WHERE b.id = g.id
	AND b.age=12
	GROUP BY  分组字段
	HAVING    分组后筛选
	ORDER BY  排序
  1. 非等值连接
//查询girls 表中age字段和user表中type字段按照type字段分类并且查询type=1的字段
	SELECT u.type,g.age 
	FROM girls g,`user` u
	WHERE g.age BETWEEN 0 AND 12
	AND u.type=1
  1. 自连接
   //查询user表中,员工名和上级的名称
	SELECT e.employeid,e.username,m.employeid,m.username 
	FROM `user` e, `user` m
	WHERE e.manage_id = m.employeid
  1. 内连接
在这里插入代码片
    //sql99语法
	SELECT 查询列表 FROM1 JOIN2
	ON 连接条件
	WHERE筛选条件
	GROUP BY 分组
	HAVING 筛选条件
  1. 外连接
在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值