博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL学习总结(一)
阅读量:2156 次
发布时间:2019-05-01

本文共 6607 字,大约阅读时间需要 22 分钟。

文章目录

前言

  数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。MySQL 是最流行的关系型数据库管理系统。

  结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。

  结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL语句分类:

在这里插入图片描述

SQL通用写法

  1. SQL语句可以单行或多行书写,以分号结尾。
  2. 可使用空格和缩进来增强语句的可读性。
  3. MySQL数据库的SQL语句不区分大小写。
  4. 3种注释:
    在这里插入图片描述
    查询返回的结果是结果集。

1 基础SQL-DDL语句

1.1 DDL操作数据库

1.1.1 创建数据库

直接创建数据库CREATE DATABASE 数据库名;判断是否存在并创建数据库(了解)CREATE DATABASE IF NOT EXISTS 数据库名;创建数据库并指定字符集(了解)CREATE DATABASE 数据库名 CHARACTER SET 字符集;

1.1.2 查看数据库

查看所有的数据库SHOW DATABASES;查看某个数据库的定义信息SHOW CREATE DATABASE 数据库名;

1.1.3 修改数据库(了解)

修改数据库字符集格式ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;alter database db3 character set utf8;--例

1.1.4 删除数据库

DROP DATABASE 数据库名;

1.1.5 使用数据库

查看正在使用的数据库SELECT DATABASE();使用/切换数据库USE 数据库名;

1.2 DDL操作表

1.2.1 常用数据类型如下

在这里插入图片描述

1.2.2 对表的增删改查

===================================创建表===================================create table 表名(     字段名 字段类型 约束,     字段名 字段类型 约束);--快速创建一个表结构相同的表CREATE TABLE 新表名 LIKE 旧表名;===================================查看表===================================--查看某个数据库中的所有表SHOW TABLES;--查看表结构DESC 表名;--查看创建表的SQL语句SHOW CREATE TABLE 表名;==============================修改表结构(了解)==============================--添加表列/字段ALTER TABLE 表名 ADD 列名 类型;--修改列/字段名ALTER TABLE 表名 MODIFY 列名 新的类型;--修改列/字段名ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;--删除列ALTER TABLE 表名 DROP 列名;--修改表名RENAME TABLE 表名 TO 新表名;--修改字符集ALTER TABLE 表名 character set 字符集;===================================删除表===================================--直接删除表DROP TABLE 表名;---判断表是否存在并删除表(了解)DROP TABLE IF EXISTS 表名;===================================更新表结构/数据===================================--不带条件修改数据UPDATE 表名 SET 字段名=值,字段名=值;--带条件修改数据UPDATE 表名 SET 字段名=值 WHERE 字段名=值 AND 字段名=值;--更新nprice字段为price字段的+10;update product set nprice=price+10;

2 基础SQL-DML语句

2.1 新增记录

===================================新增全部字段数据===================================--罗列所有的字段INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);--不写字段名INSERT INTO 表名 VALUES (值1, 值2, 值3…);此时值的个数,顺序,类型要和数据库表字段的个数,顺序,类型保持一致。===================================新增部分字段数据===================================INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

关键字说明及注意事项

  1. 关键字说明
INSERT INTO 表名 //表示往哪张表中添加数据    (字段名1, 字段名2, …) //要给哪些字段设置值    VALUES (值1, 值2, …); //设置具体的值
  1. 注意
    值与字段个数,顺序,类型都必须对应
    值的数据大小必须在字段的长度范围内
    除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
    如果要插入空值,可以不写字段,或者插入null

2.2 蠕虫复制

本质:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中。

作用:将表名2 中的数据复制到 表名1 中

INSERT INTO 表名1 SELECT * FROM 表名2;

2.3 更新表记录

--不带条件修改数据UPDATE 表名 SET 字段名=值,字段名=值;--带条件修改数据UPDATE 表名 SET 字段名=值 WHERE 字段名=值 AND 字段名=值;--更新nprice字段为price字段的+10;update product set nprice=price+10;

关键字说明:

update // 修改数据    set //修改哪些字段    where 条件; //指定条件

2.4 删除表结构

--不带条件删除数据DELETE FROM 表名;--根据条件删除数据DELETE FROM 表名 WHERE 字段名=值;--truncate删除表记录TRUNCATE TABLE 表名;

truncate和delete的区别

  delete是将表中的数据一条一条删除。

  truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样。

3 基础SQL-DQL语句(非常重要)

查询不会对数据库中的数据进行修改.只是一种显示数据的方式。

===================================查询所有===================================select * from 表名;===================================查询指定列===================================select 字段名1,字段名2... from 表名;===================================别名查询===================================select 字段名1 as 别名,字段名2 别名 from 表名 as 表别名;as关键字可以省去不写--表别名:查询商品名称和价格SELECT pro.pname,pro.price FROM product AS pro;--列别名:查询商品名称和价格SELECT pname AS "商品名称",price "商品价格" FROM product;===================================去重复查询===================================select distinct 字段名 from 表名;===================================查询结果参与运算===================================select 列名1 + 固定值 from 表名;-- 需求:将所有商品的价格+10元进行显示. (查询结果可参与运算)SELECT *,IFNULL(price,0)+10 FROM product;--同时包含了null情况

3.1 条件查询

3.1.1 比较运算符

在这里插入图片描述

例:

SELECT * FROM student3 WHERE math>80;--查询math分数大于80分的学生

3.1.2 逻辑运算符

在这里插入图片描述

例:

SELECT * FROM student3 WHERE age>35 AND sex='男';--查询age大于35且性别为男的学生(两个条件同时满足)

3.1.3 in关键字

语法格式:SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...);

in里面的每个数据都会作为一次条件,只要满足条件的就会显示。

3.1.4 范围

语法格式:SELECT * FROM 表名 WHERE 字段名 BETWEEN 值1 AND 值2

between 值1 and 值2    值1一定要小于值2    比如: age BETWEEN 80 AND 100    相当于: age>=80 && age<=100

3.1.5 like

语法格式:select * from 表名 where 字段 like 条件;

% : 模糊所有           _ : 模糊一位    例如:           "马%" 匹配以"马"字开头           "%马" 匹配以"马"字结尾           "_马" 匹配第二个字是"马"字的           "__马%" 匹配第三个字是"马"字的           "%马%" 匹配包含"马"字的

3.2 排序

  通过 ORDER BY子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)。

语法格式:select * from 表名 where 条件 order by 字段名称1 [desc | asc] , 字段名2 [desc | asc]... ;

asc(默认) : 升序(ascend)    desc :     降序(descend)    先根据字段1排序,若有第二排序字段,在第一排序字段的基础上进行第二次排序

3.2.1 单列排序

  单列排序就是使用一个字段排序。

SELECT * FROM student3 ORDER BY age DESC;--查询所有数据,使用年龄降序排序

3.2.2 组合排序

  组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。

SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];

--查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序SELECT * FROM student3 ORDER BY age DESC, math DESC;

3.3 聚合函数

  之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值

五个聚合函数:

count() : 计数    IFNULL(字段名,0) : 如果指定字段的值为null,则使用0表示    sum() : 求和    max() : 求最大值    min() : 求最小值    avg() : 求平均值            扩展-保留小数位            cast(avg(字段名称) as decimal(5,2))

聚合函数的使用:写在 SQL语句SELECT后查询结果的位置

  SELECT 字段名… FROM 表名;
  SELECT COUNT(age) FROM 表名;
此时对于NULL的记录不会记录。
  IFNULL(expr1, expr2)的用法:假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为expr2, 我们可以利用IFNULL()函数,如果记录为NULL,给个默认值,这样统计的数据就不会遗漏。
例:SELECT COUNT(IFNULL(english,0)) FROM student3;

3.4 分组

  分组查询是指使用 GROUP BY语句对查询信息进行分组,相同数据作为一组

  SELECT 字段1,字段2… FROM 表名 GROUP BY 分组字段 [HAVING 条件];

GROUP BY怎么分组的?将分组字段结果中相同内容作为一组。

SELECT * FROM student3 GROUP BY sex;这句话会将sex相同的数据作为一组。
  GROUP BY将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。

分组后聚合函数的作用?不是操作所有数据,而是操作一组数据。

注意事项:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组。

  对于分组后的条件需要使用having语句。

--查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex HAVING COUNT(*)>2;

3.4.1 having与where的区别

  • having是在分组后对数据进行过滤。
  • where是在分组前对数据进行过滤。
  • having后面可以使用聚合函数。
  • where后面不可以使用聚合函数。

3.5 limit语句

  LIMIT是 限制 的意思,所以 LIMIT 的作用就是限制查询记录的条数。

语法格式:SELECT *|字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句]\ [HAVING子句] [ORDER BY子句] [LIMIT子句];
思考:limit子句为什么排在最后?
  因为前面所有的限制条件都处理完了,只剩下显示多少条记录的问题了!

LIMIT语法格式:    LIMIT offset,length; 或者limit length;    offset 是指偏移量,可以认为是跳过的记录数量,默认为0    length 是指需要显示的总记录数
--例:从第三条开始显示,显示6条SELECT * FROM student3 LIMIT 2,6;

LIMIT的使用场景:分页

  即运用于记录过多的情况下。

-- 每页显示5条-- 第一页: LIMIT 0,5; 跳过0条,显示5条-- 第二页: LIMIT 5,5; 跳过5条,显示5条-- 第三页: LIMIT 10,5; 跳过10条,显示5条SELECT * FROM student3 LIMIT 0,5;--如果是0开始 可以简写为`LIMIT 5;`SELECT * FROM student3 LIMIT 5,5;SELECT * FROM student3 LIMIT 10,5;--不够5条的话,则有多少显示多少

转载地址:http://gyowb.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】53-Maximum Subarray
查看>>
【LEETCODE】215-Kth Largest Element in an Array
查看>>
【LEETCODE】241-Different Ways to Add Parentheses
查看>>
【LEETCODE】312-Burst Balloons
查看>>
【LEETCODE】232-Implement Queue using Stacks
查看>>
【LEETCODE】225-Implement Stack using Queues
查看>>
【LEETCODE】155-Min Stack
查看>>
【LEETCODE】20-Valid Parentheses
查看>>
【LEETCODE】290-Word Pattern
查看>>
【LEETCODE】36-Valid Sudoku
查看>>
【LEETCODE】205-Isomorphic Strings
查看>>
【LEETCODE】204-Count Primes
查看>>
【LEETCODE】228-Summary Ranges
查看>>
【LEETCODE】27-Remove Element
查看>>
【LEETCODE】66-Plus One
查看>>
【LEETCODE】26-Remove Duplicates from Sorted Array
查看>>
【LEETCODE】118-Pascal's Triangle
查看>>
【LEETCODE】119-Pascal's Triangle II
查看>>
【LEETCODE】88-Merge Sorted Array
查看>>
【LEETCODE】19-Remove Nth Node From End of List
查看>>