MySQL(上)

记死的东西

MySQL(上)_第1张图片

 mysql -u root -p

 牛马规则:联合索引中,出现范围查询(<, >),范围查询右侧的列索引失效。可以用>=或者<=来规避索引失效问题。所以,在业务允许的情况下,尽可能的使用类似于 >= 或 或 < 。

占脑子的概念、屁用没有

数据定义数据操作@#%@……#*@¥…

MySQL(上)_第2张图片

 DDL数据定义语言(牛逼,作用在高层的语句)

干数据库

查询所有数据库

show databases ;

查询当前数据库

show database();

创建数据库

create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ] ;
# create database itheima default charset utf8mb4;

        在同一个数据库服务器中,不能创建两个名称相同的数据库,否则将会报错。可以通过if not exists 参数来解决这个问题,数据库不存在, 则创建该数据库,如果存在,则不 创建。

删除数据库

drop database [ if exists ] 数据库名 ;

切换数据

use 数据库名 ;

干表

查询当前数据库所有表

# use sys;
# show tables;

查看指定表结构

通过这条指令,我们可以查看到指定表的字段,字段的类型、是否可以为NULL,是否存在默认值等信息。

desc 表名 ;

MySQL(上)_第3张图片

查询指定表的建表语句

show create table 表名 ;

        通过这条指令,主要是用来查看建表语句的,而有部分参数我们在创建表的时候,并未指定也会查询 到,因为这部分是数据库的默认值,如:存储引擎、字符集等。

MySQL(上)_第4张图片

创建表结构
CREATE TABLE 表名(
    字段1 字段1类型 [ COMMENT 字段1注释 ],
    字段2 字段2类型 [COMMENT 字段2注释 ],
    字段3 字段3类型 [COMMENT 字段3注释 ],
    ......
    字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;

 [ ] 表示可选参数

MySQL(上)_第5张图片

MySQL(上)_第6张图片

改表

添加字段

ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

改数据类型

ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度)

修改字段名和字段类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

删除某个属性 

ALTER TABLE 表名 DROP 字段名;

修改表名

ALTER TABLE 表名 RENAME TO 新表名;
删除表 
DROP TABLE [ IF EXISTS ] 表名

 删除指定表, 并重新创建表

TRUNCATE TABLE 表名;

DML数据操作语言

增  删  改

给指定字段添加数据

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

insert into employee(id,workno,name,gender,age,idcard,entrydate)
values(1,'1','Itcast','男',10,'123456789012345678','2000-01-01');

给all字段添加数据, 省略列名

INSERT INTO 表名 VALUES (值1, 值2, ...);

批量添加数据

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值
1, 值2, ...) ;
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;
 修改数据UPDATE
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
# 将所有的员工入职日期修改为 2008-01-01
update employee set entrydate = '2008-01-01';
# 修改id为1的数据, 将name修改为小昭, gender修改为 女
update employee set name = '小昭' , gender = '女' where id = 1;
 删除数据
DELETE FROM 表名 [ WHERE 条件 ] ;
#  删除gender为女的员工
delete from employee where gender = '女';
# 删除所有员工!!!
delete from employee;

DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数 据。

DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即 可)。 

DQL数据查询语言  SELECT

基本结构

SELECT 字段列表 FROM 表名列表
    WHERE    
        条件列表
    GROUP BY
        分组字段列表
    HAVING
        分组后条件列表
    ORDER BY
        排序字段列表
    LIMIT
        分页参数

 起别名

SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;

去重 

SELECT DISTINCT 字段列表 FROM 表名;

条件查询、运算符

比较运算符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
BETWEEN … AND … 在某个范围内(含最小、最大值)
IN(…) 在in之后的列表中的值,多选一
LIKE 占位符 模糊匹配(_匹配单个字符,%匹配任意个字符)
IS NULL 是NULL
逻辑运算符 功能
AND 或 && 并且(多个条件同时成立)
OR 或 || 或者(多个条件任意一个成立)
NOT 或 ! 非,不是
# 年龄等于 88 的员工
select * from emp where age = 88;
# 询年龄小于= 20 的员工信息
select * from emp where age <= 20;
# 没有身份证号的员工信息
select * from emp where idcard is null;
# 年龄在15岁(包含) 到 20岁(包含)之间的员工信息
select * from emp where age >= 15 && age <= 20;
select * from emp where age >= 15 and age <= 20;
select * from emp where age between 15 and 20;
# 性别为 女 且年龄小于 25岁的员工信息
select * from emp where gender = '女' and age < 25;
# 年龄等于18 或 20 或 40 的员工信息
select * from emp where age = 18 or age = 20 or age =40;
select * from emp where age in(18,20,40);


# 姓名为两个字的员工信息 _ %
select * from emp where name like '__';
#  查询身份证号最后一位是X的员工信息
select * from emp where idcard like '%X';
select * from emp where idcard like '_________________X';

聚合函数 count,avg,min

将一列数据作为一个整体,进行纵向计算

me: 查完一个列整体后做一个计算

函数 功能
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
SELECT 聚合函数(字段列表) FROM 表名 ;
#  NULL值是不参与所有聚合函数运算的。
# 统计该企业员工数量
select count(*) from emp; -- 统计的是总记录数
select count(idcard) from emp; -- 统计的是idcard字段不为null的记录数
# 西安地区员工的年龄之和
select sum(age) from emp where workaddress = '西安';
INSERT INTO 表名 VALUES (值1, 值2, ...);

分组查询  GROUP BY

SELECT 字段列表 FROM 表名 
    [ WHERE 条件 ] 
    GROUP BY 分组字段名 
    [ HAVING 分组后过滤条件 ];
where与having区别

执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;

                        而having是分组 之后对结果进行过滤。

判断条件不同:where不能对聚合函数进行判断,而having可以。

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
  • 执行顺序: where > 聚合函数 > having 。
  • 支持多字段分组, 具体语法为 : group by columnA,columnB
# 根据性别分组 , 统计男性员工 和 女性员工的数量
select gender, count(*) from emp group by gender ;
#  根据性别分组 , 统计男性员工 和 女性员工的平均年龄
select gender, avg(age) from emp group by gender ;

# 查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from emp 
    where age < 45 
    group by workaddress 
    having address_count >= 3;

#  统计各个工作地址上班的男性及女性员工的数量
select workaddress, gender, count(*) '数量' from emp group by gender , workaddress;

排序 ORDER BY

SELECT 字段列表 FROM 表名 
    ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
ASC : 升序(默认值)
DESC: 降序

分页查询  LIMIT

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;

• 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。???看案例

• 分页查询是数据库的方言,不同的数据库有不同的实

你可能感兴趣的:(大数据,mysql,数据库,sql)