MySQL的学习记录

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.注释
单行注释:#注释文字
单行注释:-- 注释文字
多行注释:/* 注释文字 */

查询

进阶一:基础查询

语法

select 查询列表 from 表名;

类似于:System.out.printf(打印东西);

特点:
1.查询列表可以是:表中的字段,常量值,表达式。,函数。
2.查询的结果是一个虚拟性的表格

#补充
查询打开库时,在上方先写上:USE 库名;

起别名

优点
1.便于理解
2.如果要查询的字段有重名的情况,使用别名可以区分开来。
例:
方式一: 使用AS
SELECT 100/50 AS 结果;
SELECT last_name AS 姓,first-name AS 名 FROM emloyees;

方式二:使用空格
SELECT last_name 姓,first-name 名 FROM emloyees;

有的别名是含有特殊符号的情况下,加上’ '区别,避免歧义

去重

案例:查询员工表中涉及的所有的部门编号

SELECT DISTINCT department_id FROM employees;

+的作用

mysql中的+的作用仅仅只有一个功能那就是运算符。

案例:查询员工的名和姓连接成一个字段,并显示为 姓名
SELECT
CONCat(last_name,first_name) AS 姓名
FROM
employees;

进阶二 条件基础查询

语法:
select
查询列表
from
表名
where
筛选条件;

分类:
一:按照条件表达式筛选
简单运算符:
> < = != <> >= <=

          二:按照逻辑表达式筛选
           逻辑运算符:作用:用于连接条件表达式
              &&    ||      !
              and  or     not
              
           三:模糊查询
                  like
                  betwween and
                  in
                  is null

1.按照条件表达式筛选
案例一:查询工资大于12000的员工信息
SELECT
*
FROM
employees
WHERE
salary > 120000;

2.按照逻辑表达式筛选
案例一:查询工资在10000到20000之间的员工名,工资,及奖金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary>=10000 AND salary<=20000;

3.模糊查询
like
in
is null
between and

补充:安全等于 <=>

注意:字符型和日期型常量值必须用单引号引起来

排序查询

语法:
select 查询列表
from 表
【where 筛选条件】
order by 排序列表 【asc|desc】

案例一; 查询员工信息,要求工资从高到低排序
SELECT * FROM employees ORDER BY salary DESC;

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

进阶四

常见函数的学习

概念:类似于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
好处: 1.隐藏了实现的细节 2 .提高了代码的重用性
调用:select 函数名(实参列表)【from 表】;
特点:
1.叫什么(函数名)
2.干什么(函数功能)
分类
1.单行函数
如 concat ifnull length等
2.分组函数

	功能:做统计使用,又称为统计函数,聚合函数,组函数。

字符函数

length

作用:获取参数值的字节个数

SHOW VARIABLES LIKE ‘%cahr%’ 查看字符集

concat

作用:拼接字符串
SELECT CONCAT(last_name+’_’+first_name)姓名 FROM employees;

upper,lower

作用:大小写转换

SELECT UPPER(‘jhon’);
SELECT LOWER(“jhon”);

substr,substring

注意:索引重1开始

1.截取从索引以后的字符
SELECT SUBTER(‘我就是最棒的’,4)out put;

2.截取从指定索引处指定长度的字符
SELECT SUBSTR(‘我是最棒的那是不可否认的,2,5’)out put;

inster

作用:返回子串第一次出现的索引,如果找不到就返回0;

trim

SELECT TRIM(’a’ FROM ‘aaaaaaaaaa大笨aaaaaaaaa蛋aaaa’);

只会去掉前后两端的a、

lpad,rpad

做用:用指定的字符实现左/右填充指定长度

replace 替换

SELECT REPLACE(‘张无忌爱上了周芷若’,‘周芷若’,‘赵敏’);

数学函数

round 四舍五入

ceil 向上取整,返回>=该参数的最小整数

floor 向下取整,返回<=该参数的最大整数

truncate 截断

mod 取余

日期函数

now 返回当前系统日期+时间

SELECT NOW();

curdate 返回当前系统时间,不包含时间

SELECT CURDATE();

curtime 返回当前时间,不包含日期

SELECT CURTIME ();

str_to_date 将字符通过指定的格式转换成日期

SELECT STR_TO_DATE(‘1998-3-18’,‘%Y-%C-%D’);

date_format 将日期转换成字符

其他函数

流程控制函数

if函数 if else 效果

case函数
使用一:
case 要判断的字段或者表达式
when 常量1 then 要显示的值1或者语句1
when 常量2 then 要显示的值2或者语句2

else 要显示的值n或者语句n
end
使用二:
case
when 条件1 then 要显示的值1或者语句1
when 条件2 then 要显示的值2或者语句2
。。。
else 要显示的值n或者语句n
end

分组函数

功能:用于统计功能‘

分类:
sum 求和, avg 平均值 , max 最大值, min最小值, count计算个数

SELECT SUM(单行字段)FROM 表;

分组函数的使用特点

参数支持那种类型

1.sum,avg一般用于处理数值型
max,min,count可以处理任意的类型
2.以上分组函数都忽略null值
3.可以和distinct搭配实现去重的运算

4.count函数的详细介绍:
注:一般使用COUNT(*)统计行数

         SELECT COUNT(*) FROM employees;  通常用*来统计行数
         SELECT COUNT(1)FROM employees;
         效率:
         MYISAM存储引擎下,count(*)的效率高
         INNODB存储引擎下,count(*)与count(1)的效率差不多,比count(字段)要高一些

5.和分组函数一同查询的字段要求是group by后面的字段

进阶五:分组查询

分组数据: GROUP BY 字句语法
可以使用GROUP BY 子句将表中的数据分成若干组

    SELECT     column,group_function(column)
    FROM        table
    [WHERE    condition]
    [GROUP  BY       group_by_xpression]
    [ORDER  BY       column];
    语法:
        select  分组函数,列(要求出现在group by 的后面)
        from 表
        【where 筛选条件】
        group up 分组的列表
        【order by 子句】
    注意;
          查询列表必须特殊,要求是分组函数和group by 后面出现的字段
 
 特点:
        1.分组查询中的筛选条件分为两类
        分组前筛选   数据源为原始表   位置 group by 子句的前面 关键字是where
        分组后筛选   数据源为分组后的结果集  位置 group by 子句的后面  关键字是having

  1. 分组函数做条件肯定放在having子句中
  2. 能用分组前筛选的,就优先使用分组前筛选
  3. group by子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或者函数(用的较少)
  4. 也可以添加排序,(排序放在分组查询的最后)

明确:WHERE一定放在FROM后面

简单的分组查询

案例一:查询每个工种的最高工资
SELECT MAX(salary),job_id
FROM employees
GROUP BY job_id;

案例二:查询每个位置上的部门个数
SELECT COUNT(*),location_id
FROM departments
GROUP BY location_id;

添加分组后查询

案例一:查询那个部门的员工个数大于2
1.查询每个部门的员工个数
SELECT COUNT(),department_id
FROM employees
GROUP BY department_id
2.根据1的结果进行筛选,查询那个部门的员工个数>2
HAVING COUNT(
);

进阶六:连接查询

含义:又称多表查询,当查询的字段来自多个表时,就会用到连接查询
笛卡尔乘积现象:表一有m行 表二有n行,结果m*n行

发生原因:没有有效的连接条件
如何避免:添加有效的连接条件

分类:
       按年代分类:
       sql92标准:仅仅支持内连接
       sql99标准【推荐】:支持内连接+外连接(左,右外连接)+交叉连接
  
       按功能分类:
       内连接:
                 等值连接
                 非等值连接
                 自连接
       外连接:
        	 左外连接
        	 右外连接
        	 全外连接
       交叉连接

sql92标准

1.等值连接:
案例一:查询员工名和对应的部门名
SELECT last_name,department_id
FROM employees,departments
WHERE employees.‘department_id’=department.‘department_id’;

注:可为表起别名,
1.提高代码的简洁度
2.区分多个重名的字段
注;如果为表起了别名,则查询的字段就不能使用原来的表名去限定
3.自连接
案例一:查询员工名和上级的名称
SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
FROM employees e,employees m
WHERE e.‘manager_id’=m.‘employee_id’;

sql99语法标准

 语法:
         select 查询列表
         from 表1 别名 【连接类型】
         join   表2 别名 
         on 连接条件
       【where 筛选条件】
       【group by 分组】
       【having 筛选条件】
       【order by 排序列表】

分类:
内连接(❤):inner
外连接
左外(❤):left 【outer】
右外(❤):right 【outer】
全外:full 【outer】
交叉连接: cross

内连接

语法:

select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件;

分类:
等值
非等值
自连接

1.等值连接
案例一:查询员工名部门名
SELECT last_name,department_name
FROM emplyees e
INNER JOIN departments d
ON e.‘department_name’=d.‘department_name’;

案例二: 查询部门个数>3的城市名和部门个数(添加分组+筛选)

SELECT city,COUNT()
FROM department d
INNER JOIN location l
ON d.‘location_id’=l."locatiom_id’
GROUP BY city
HAVING count(
)>3;
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

非等值连接

在这里插入图片描述

在这里插入图片描述

自连接

在这里插入图片描述

外连接

应用场景:查询一个表中有,另一个表中没有的记录

特点:

		1.外连接的查询结果为主表中的所有记录
		如果从表中有和他它匹配的,则显示匹配的值
		如果从表中没有和他匹配的,则显示为null
		外连接的查询结果=内连接结果+主表中有而从表中没有的记录
		
		2. 左外连接,left join 左边的是主表
		3. 右外连接,right on 右边的是主表
		4. 左外和右外交换两个表的顺序,可以实现相同的效果
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值