文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL的第一篇文章——了解数据库、简单的SQL语句

2023-09-09 15:43

关注

目录

学习目标

第一章 介绍数据库

1. 数据库概述

2. MySQL概述

第二章 MySQL的使用

1. MySQL服务的启动

2. 客户端连接MySQL

2.1 命令行客户端

第三章 SQL的介绍

1. 什么是SQL

2. SQL的分类

3. MySQL的语法规范和要求

第四章 DDL操作数据库

1. 创建数据库

2. 查看所有的数据库

2.1 查看所有的数据库

2.2 查看数据库的定义结构【了解】

3. 删除数据库

4. 修改数据库【了解】

5. 其他操作

第五章 DDL操作表

1. 创建表

1.1 语法

1.2 类型

1.2.1 数值类型

1.2.2 日期时间类型

1.2.3 字符串类型

1.2.4 示例

1.3 约束

1.4 练习

2. 查看表【了解】 

2.1 查看所有的表

2.2 查看表的定义结构

3. 修改表【掌握,但是不要死记硬背】

3.1 语法

3.2 练习

4. 删除表【掌握】

第六章 DML操作表记录(增删改)【重点】

1. 插入记录

1.1 语法

2. 更新记录

2.1 语法

2.2 练习

3. 删除记录

3.1 delete

3.2 truncate

3.3 工作中删除数据

第七章 DQL操作表记录(查询)【重点】

1. 基本查询语法

2. 简单查询

2.1 查询所有行和所有列的记录

2.2 查询某张表特定列的记录

2.3 去重查询 distinct

2.4 别名查询

2.5 运算查询(+,-,*,/,%等)

3. 条件查询(很重要)

3.1 语法

3.2 运算符

3.2.1 比较运算符

3.2.2 逻辑运算符(建议用单词,可读性来说)

3.2.3 范围

3.2.4 模糊查询和正则匹配(只针对字符串类型,日期类型)

3.2.5 特殊的null值处理

3.3 练习

4. 排序查询

4.1 环境的准备

4.2 单列排序

4.3 组合排序

5. 聚合函数

6. 分组查询

6.1 分组

6.2 分组后赛选 having

6.3 where和having的区别【面试】

7. 分页查询

7.1 练习

8. 查询的语法小结

本文章的小结【思维导图】


1. 数据库概述

DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。

DB:数据库(Database)

SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。

MySQL:其中的一款关系型数据库管理系统

以下是2019年DB-Engines Ranking 对各数据库受欢迎程度进行调查后的统计结果:(查看数据库最新排名:DB-Engines Ranking - popularity ranking of database management systems

关系型数据库,采用关系模型来组织数据,简单来说,关系模型指的就是二维表格模型。类似于Excel工作表。非关系型数据库,可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,通过减少很少用的功能,来提高性能。

关系型数据库设计规则

2. MySQL概述

MySQL是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。目前 MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得很多互联网公司选择了MySQL作为网站数据库(Facebook, Twitter, YouTube,阿里的蚂蚁金服,去哪儿,魅族,百度外卖,腾讯)。

1. MySQL服务的启动

“我的电脑/计算机”-->右键-->“管理”-->“服务”-->启动和关闭MySQL服务

“开始菜单”-->“控制面板”-->“管理工具”-->“服务”-->启动和关闭MySQL

“任务管理器”-->“服务”-->启动和关闭MySQL

或者

以管理员身份打开命令行

net  start  MySQL服务名net  stop  MySQL服务名

2. 客户端连接MySQL

2.1 命令行客户端

mysql -h 主机IP地址 -P 端口号-u 用户名-p回车Enter Password:密码

如果访问本机,-h localhost可以省略。

如果端口号没有修改,-P 3306可以省略。

除了-p与密码之间不要空格外,其他的-h,-P,-u与后面的参数值之间可以有空格。

想要连接成功,必须保证服务开启的。

2 其他客户端

例如:可视化工具Navicat或者SQLyog等

1. 什么是SQL

2. SQL的分类

红色加粗需重点掌握

3. MySQL的语法规范和要求

(1)mysql的sql语法不区分大小写

MySQL的关键字和函数名等不区分大小写,但是对于数据值是否区分大小写,和字符集与校对规则有关。

ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写)

(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号

(3)建议不要使用mysql的关键字等来作为表名、字段名等,如果不小心使用,请在SQL语句中使用`(飘号)引起来

(4)数据库和表名、字段名等对象名中间不要包含空格

(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名

(6)标点符号:

必须成对

必须英文状态下半角输入方式

字符串和日期类型可以使用单引号''

列的别名可以使用双引号"",给表名取别名不要使用双引号。取别名时as可以省略

如果列的别名没有包含空格,可以省略双引号,如果有空格双引号不能省略

(7)SQL脚本中如何加注释

单行注释:#注释内容

单行注释:--空格注释内容 其中--后面的空格必须有

多行注释:/* 注释内容 *

#以下两句是一样的,不区分大小写show databases;SHOW DATABASES;#创建表格#create table student info(...); #表名错误,因为表名有空格create table student_info(...); #其中name使用``飘号,因为name和系统关键字或系统函数名等预定义标识符重名了。CREATE TABLE t_stu(    id INT,    `name` VARCHAR(20));select id as "编号", `name` as "姓名" from t_stu; #起别名时,as都可以省略select id as 编号, `name` as 姓名 from t_stu; #如果字段别名中没有空格,那么可以省略""select id as 编 号, `name` as 姓 名 from t_stu; #错误,如果字段别名中有空格,那么不能省略""

1. 创建数据库

create database 数据库名 [character set 字符集][collate  校对规则]     注: []意思是可选的意思

 字符集(charset):是一套符号和编码。

创建一个day01的数据库(默认字符集)

create database day01;

创建一个day01_2的数据库,指定字符集为gbk(了解)

create database day01_2 character set gbk;

2. 查看所有的数据库

2.1 查看所有的数据库

show databases; 

2.2 查看数据库的定义结构【了解】

show create database 数据库名;
show create database day01; 

3. 删除数据库

drop database 数据库名;
drop database day01_2;

4. 修改数据库【了解】

alter database 数据库名 character set 字符集;
alter database day01 character set gbk;

注意:

5. 其他操作

use 数据库名;   //注意: 在创建表之前一定要指定数据库. use 数据库名
use day01;
select database();

1. 创建表

1.1 语法

create table 表名(列名 类型 [约束],列名 类型 [约束]...);

1.2 类型

1.2.1 数值类型

int(M),必须和unsigned zerofill一起使用才有意义

double(M,D):表示最长为M位,其中小数点后D位

例如:double(5,2)表示的数据范围[-999.99,999.99],如果超过这个范围会报错

decimal(M,D):表示最长为M位,其中小数点后D位

字节范围是:1-8,值范围是:bit(1)~bit(64),默认bit(1)

用来存储二进制数。对于位字段,直接使用select命令将不会看到结果。可以使用bit()或hex()函数进行读取。插入bit类型字段时,使用bit()函数转为二进制值再插入,因为二进制码是“01”。

1.2.2 日期时间类型

日期时间类型:year, date, datetime, timestamp

注意一下每一种日期时间的表示范围

timestamp和datetime的区别:

1.2.3 字符串类型

MySQL中提供了多种对字符数据的存储类型,不同的版本可能有所差异。常见的有:

char,varchar,xxtext,binary,varbinary,xxblob,enum,set等等

char如果没有指定宽度,默认为1个字符

varchar(M),必须指定宽度

1.2.4 示例

+----------------+--------------+------+-----+---------+----------------+| Field          | Type         | Null | Key | Default | Extra          |+----------------+--------------+------+-----+---------+----------------+| eid            | int(11)      | NO   | PRI | NULL    | auto_increment || ename          | varchar(20)  | NO   |     | NULL    |                || tel            | char(11)     | NO   |     | NULL    |                || gender         | char(1)      | YES  |     | 男        |                || salary         | double       | YES  |     | NULL    |                || commission_pct | double(3,2)  | YES  |     | NULL    |                || birthday       | date         | YES  |     | NULL    |                || hiredate       | date         | YES  |     | NULL    |                || job_id         | int(11)      | YES  |     | NULL    |                || email          | varchar(32)  | YES  |     | NULL    |                || mid            | int(11)      | YES  |     | NULL    |                || address        | varchar(150) | YES  |     | NULL    |                || native_place   | varchar(10)  | YES  |     | NULL    |                || did            | int(11)      | YES  |     | NULL    |                |+----------------+--------------+------+-----+---------+----------------+

1.3 约束

约束约束关键字
主键primary key非空且唯一,并且一张表只能有一个主键
唯一unique唯一,当前列不能出现相同的数据
非空not null非空,当前列不能为null
默认default如果当前列没有数据,则指定默认数据

约束种类:

注意:

  1. 先设置了primary key 再能设置auto_increment

  2. 只有当设置了auto_increment 才可以插入null , 否则插入null会报错

id列:

  1. 给id设置为int类型, 添加主键约束, 自动增长

  2. 或者给id设置为字符串类型,添加主键约束, 不能设置自动增长

1.4 练习

CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增长NAME VARCHAR(30) UNIQUE, -- 唯一约束gender CHAR(1) NOT NULL DEFAULT '男');

2. 查看表【了解】 

2.1 查看所有的表

show tables;

2.2 查看表的定义结构

desc student;

3. 修改表【掌握,但是不要死记硬背】

3.1 语法

alter table 【数据库名.]表名称 add 【column】 字段名 数据类型;alter table 【数据库名.]表名称 add 【column】 字段名 数据类型 first;alter table 【数据库名.]表名称 add 【column】 字段名 数据类型 after 另一个字段;
alter table 表名 modify 字段 类型 约束 ;
alter table 表名 change 旧列 新列 类型 约束;
alter table 表名 drop 列名;
rename table 旧表名 to 新表名;

3.2 练习

ALTER TABLE student ADD grade VARCHAR(20) NOT NULL;
alter table student modify gender varchar(20);
ALTER TABLE student CHANGE grade class VARCHAR(20) NOT NULL;
ALTER TABLE student DROP class;
RENAME TABLE student TO teacher;

4. 删除表【掌握】

drop table teacher;
create table product(pid int primary key auto_increment,pname varchar(40),price double,num int);

1. 插入记录

1.1 语法

insert into 表名(列,列..) values(值,值..);

注意: 如果没有插入了列设置了非空约束, 会报错的

insert into 表名 values(值,值....);           eg:insert into product values(null,'苹果电脑',18000.0,10);insert into product values(null,'华为5G手机',30000,20);insert into product values(null,'小米手机',1800,30);insert into product values(null,'iPhonex',8000,10);insert into product values(null,'iPhone7',6000,200);insert into product values(null,'iPhone6s',4000,1000);insert into product values(null,'iPhone6',3500,100);insert into product values(null,'iPhone5s',3000,100);insert into product values(null,'方便面',4.5,1000);insert into product values(null,'咖啡',11,200); insert into product values(null,'矿泉水',3,500);

2. 更新记录

2.1 语法

update 表名 set 列 =值, 列 =值 [where 条件]

2.2 练习

update product set price = 5000;
UPDATE product set price = 18000 WHERE pname = '苹果电脑';
UPDATE product set price = 17000,num = 5 WHERE pname = '苹果电脑';
UPDATE product set price = price+2 WHERE pname = '方便面';

3. 删除记录

3.1 delete

根据条件,一条一条数据进行删除

delete from 表名 [where 条件]    注意: 删除数据用delete,不用truncate

删除表中名称为’苹果电脑’的记录

delete from product where pname = '苹果电脑';

删除价格小于5001的商品记录

delete from product where price < 5001;

删除表中的所有记录

delete from product;

3.2 truncate

把表直接DROP掉,然后再创建一个同样的新表。删除的数据不能找回,执行速度比DELETE快。

truncate table 表名;

3.3 工作中删除数据

1. 基本查询语法

select 要查询的字段名 from 表名 [where 条件] 

2. 简单查询

2.1 查询所有行和所有列的记录

select * form 表
select * from product;

2.2 查询某张表特定列的记录

select 列名,列名,列名... from 表
select pname, price from product;

2.3 去重查询 distinct

SELECT DISTINCT 字段名 FROM 表名;   //要数据一模一样才能去重
SELECT DISTINCT pname,price FROM product

注意点: 去重针对某列, distinct前面不能先出现列名

2.4 别名查询

select 列名 as 别名 ,列名  from 表   //列别名  as可以不写select 别名.* from 表 as 别名      //表别名(多表查询, 明天会具体讲)
SELECT pid ,pname AS '商品名',price AS '商品价格',num AS '商品库存' FROM product

2.5 运算查询(+,-,*,/,%等)

select pname ,price+10 as price from product;select name,chinese+math+english as total from student

注意:

3. 条件查询(很重要)

3.1 语法

select ... from 表 where 条件 //取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回

条件查询接在where之后 

3.2 运算符

3.2.1 比较运算符

大于:>小于:<大于等于:>=小于等于:<=等于:=   不能用于null判断不等于:!=  或 <>安全等于: <=>  可以用于null值判断

3.2.2 逻辑运算符(建议用单词,可读性来说)

逻辑与:&& 或 and逻辑或:|| 或 or逻辑非:! 或 not逻辑异或:^ 或 xor

3.2.3 范围

区间范围:between x  and  y    not between x  and  y集合范围:in (x,x,x)     not  in (x,x,x)

3.2.4 模糊查询和正则匹配(只针对字符串类型,日期类型)

like 'xxx'  模糊查询是处理字符串的时候进行部分匹配如果想要表示0~n个字符,用%如果想要表示确定的1个字符,用_

3.2.5 特殊的null值处理

#(1)判断时xx is nullxx is not nullxx <=> null

3.3 练习

select * from product where price > 3000;
select * from product where pid = 1;
select * from product where pid <> 1;
select * from product where price between 3000 and 6000;
select * from product where id = 1;select * from product where id = 5;select * from product where id = 7;select * from product where id = 15;select * from product where id in (1,5,7,15);
select * from product where pname like 'iPho%';
select * from product where price > 3000 and num > 20;
select * from product where pid = 1 or price < 3000;

4. 排序查询

排序是写在查询的后面,代表把数据查询出来之后再排序

4.1 环境的准备

# 创建学生表(有sid,学生姓名,学生性别,学生年龄,分数列,其中sid为主键自动增长)CREATE TABLE student(sid INT PRIMARY KEY auto_increment,sname VARCHAR(40),sex VARCHAR(10),age INT,    score DOUBLE);INSERT INTO student VALUES(null,'zs','男',18,98.5);INSERT INTO student VALUES(null,'ls','女',18,96.5);INSERT INTO student VALUES(null,'ww','男',15,50.5);INSERT INTO student VALUES(null,'zl','女',20,98.5);INSERT INTO student VALUES(null,'tq','男',18,60.5);INSERT INTO student VALUES(null,'wb','男',38,98.5);INSERT INTO student VALUES(null,'小丽','男',18,100);INSERT INTO student VALUES(null,'小红','女',28,28);INSERT INTO student VALUES(null,'小强','男',21,95);

4.2 单列排序

SELECT 字段名 FROM 表名 [WHERE 条件] ORDER BY 字段名 [ASC|DESC];  //ASC: 升序,默认值; DESC: 降序
SELECT * FROM student ORDER BY score DESC

4.3 组合排序

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

5. 聚合函数

聚合函数通常会和分组查询一起使用,用于统计每组的数据

聚合函数作用
max(列名)求这一列的最大值
min(列名)求这一列的最小值
avg(列名)求这一列的平均值
count(列名)统计这一列有多少条记录
sum(列名)对这一列求总和
SELECT 聚合函数(列名) FROM 表名 [where 条件];
-- 求出学生表里面的最高分数SELECT MAX(score) FROM student-- 求出学生表里面的最低分数SELECT MIN(score) FROM student-- 求出学生表里面的分数的总和(忽略null值)SELECT SUM(score) FROM student-- 求出学生表里面的平均分SELECT AVG(score) FROM student-- 统计学生的总人数 (忽略null) SELECT COUNT(sid) FROM studentSELECT COUNT(*) FROM student

注意:  聚合函数会忽略空值NULL

我们发现对于NULL的记录不会统计,建议如果统计个数则不要使用有可能为null的列,但如果需要把NULL也统计进去呢?我们可以通过 IFNULL(列名,默认值) 函数来解决这个问题. 如果列不为空,返回这列的值。如果为NULL,则返回默认值。

SELECT AVG(IFNULL(score,0)) FROM student;

6. 分组查询

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

6.1 分组

SELECT 字段1,字段2... FROM 表名  [where 条件] GROUP BY 列 [HAVING 条件];
-- 根据性别分组, 统计每一组学生的总人数SELECT sex '性别',COUNT(sid) '总人数' FROM student GROUP BY sex-- 根据性别分组,统计每组学生的平均分SELECT sex '性别',AVG(score) '平均分' FROM student GROUP BY sex-- 根据性别分组,统计每组学生的总分SELECT sex '性别',SUM(score) '总分' FROM student GROUP BY sex

6.2 分组后赛选 having

SELECT sex, count(*) FROM student GROUP BY sex HAVING count(*) > 5
SELECT sex '性别',COUNT(sid) '总人数' FROM student WHERE age >= 18 GROUP BY sex HAVING COUNT(sid) > 4

6.3 where和having的区别【面试】

子名作用
where 子句1) 对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,即先过滤再分组。2) where后面不可以使用聚合函数
having字句1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。2) having后面可以使用聚合函数

7. 分页查询

select ... from .... limit a ,b
LIMIT a,b;
a 表示的是跳过的数据条数
b 表示的是要查询的数据条数

7.1 练习

-- 分页查询-- limit 关键字是使用在查询的后边,如果有排序的话则使用在排序的后边-- limit的语法: limit offset,length  其中offset表示跳过多少条数据,length表示查询多少条数据SELECT * FROM product LIMIT 0,3-- 查询product表中的前三条数据(0表示跳过0条,3表示查询3条)SELECT * FROM product LIMIT 3,3-- 查询product表的第四到六条数据(3表示跳过3条,3表示查询3条)-- 分页的时候,只会告诉你我需要第几页的数据,并且每页有多少条数据-- 假如,每页需要3条数据,我想要第一页数据: limit 0,3-- 假如,每页需要3条数据,我想要第二页数据: limit 3,3-- 假如,每页需要3条数据,我想要第三页数据: limit 6,3-- 结论: length = 每页的数据条数,offset = (当前页数 - 1)*每页数据条数-- limit (当前页数 - 1)*每页数据条数, 每页数据条数

8. 查询的语法小结

select...from...where...group by...order by...limitselect...from...where...select...from...where...order by...select...from...where...limit...select...from...where...order by...imit

 

来源地址:https://blog.csdn.net/ANNE_fly/article/details/132185796

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯