MySQL —— 数据库 ——基础篇一

什么是数据库

数据库( DataBase )为了方便数据的存储和管理,它将数据按照特定的 规则存储在磁盘上 , 就是一个存储数据的仓库。
DB:数据库(DateBase),存储数据的容器。
DBMS:数据库管理系统(DataBase Management System), 又称为数据库软件或数据库产品,用于创建或管理 DB

为什么使用数据库

1.实现数据持久化到本地。

2.使用完整的管理系统统一管理,可以实现结构化查询,方便管理。

MySQL 数据库

1.MySQL 是一种关系型数据库管理系统。

2.MySql软件是一种开放源码软件,你可以修改源码来开发自己的 Mysql 系统。

3.MySql数据库服务器具有快速、可靠和易于使用的特点。

4.MySql使用标准的sql语言,并且支持多种操作系统,支持多种语言。

5.mysql商业版与社区版,MySQL商业版是由MySQL AB公司负责开发与维护,需要付费才能使用,

6.MySQL社区版是由分散在世界各地的MySQL开发者、爱好者一起开发与维

护,可以免费使用。

MySQL 的安装

http://t.csdnimg.cn/APQcJ,这个链接的教程很详细。

结构化查询语言(sql)

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

sql优点

不是某个特定数据库供应商专有的语是言,几乎所有 DBMS 都支持 SQL简单易学,灵活使用可以进
行非常复杂和高级的数据库操作

​​​DDL 

1.数据 ( 结构 ) 定义语言 DDL(Data Definition Language) ,是用于创建和修改数据库表结构的语言
2. 常用的语句: create  :创建数据库,表等
-- 创建一个数据库,名称为 csdndb 关键词 database
-- CREATE DATABASE [if not exists] 数据库名 [ CHARSET utf8]  []表示可以写也可以不写
CREATE DATABASE csdndb
-- 删除数据库DROP DATABASE 数据库名 / [IF EXISTS数据库名]  []表示可以写也可以不写
DROP DATABASE csdn IF EXISTS

-- 创建一个表,名称为 cs 关键词 table
CREATE TABLE cs(
id INT 
)

alter : 修改关键词
-- 修改字符集  ALTER DATABASE 数据库名 CHARSET gbk;修改编码方式,修改前是utf8
ALTER DATABASE csdndb CHARSET gbk
drop : 执行删除数据库,表等操作
-- 删除数据库DROP DATABASE 数据库名 / [IF EXISTS数据库名]  []表示可以写也可以不写
DROP DATABASE csdn IF EXISTS
-- 删除表 cs
DROP TABLE cs
rename :重新修改名称
-- 重新命名cs表为csd
RENAME TABLE cs TO csd

DML 

数据操纵语言DMLData Manipulation Language)执行数据库的 增、删、改

常用语句: insert:插入数据语句

插入数据
方式1: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);
方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;
方式3: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);
方式4:INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)
*/
INSERT INTO student(NAME,gender,birthday,phone) VALUES('张三','男','2003-2-5','127333666')
INSERT INTO student(NAME,gender,birthday,phone,address,height,reg_time) 
             VALUES('张三封','男','2003-6-5','127333677','汉中',1.76,NOW())
INSERT INTO student(NAME,gender,birthday,phone,address,height,reg_time) 
             VALUES('张三封','男','2003-6-5','127333688','汉中',1.76,NOW()),
             ('李丽','女','2002-8-5','127333699','汉中',1.56,NOW()),
             ('张百合','男','2002-6-5','127333610','汉中',1.86,NOW())
INSERT INTO student SET NAME='李四',gender='男',birthday='2022-8-9',phone='19192345'

delete :删除语句

-- 删除语句
DELETE FROM stu -- 删除表里的所有数据
-- 删除 num=3 的数据
DELETE
FROM student
WHERE num=3

update 修改语句

-- 修改语句
UPDATE stu SET address='西安',height=1.55 -- 没有限制条件就会全都改变 
UPDATE student SET address='西安',height=1.55 WHERE num=1 

DQL

DQL Data Query Language )数据查询语言查询是使用频率最高的一个操作, 可以从一个表中查询数据,也可以从多个表中查询数据。
语法
select 查询列表 from 表名 ;
特点:
查询列表可以是:表中的字段、常量、表达式、函数
查询的结果是一个虚拟的表格,不会修改查询表的内容
-- 查询
SELECT * FROM student;

-- sql 中 + - * /只是算数运算
SELECT num+100,NAME FROM student 

MySQL中常用的函数

单行函数:如concatlengthifnull

单行函数

字符函数

length() :获取参数值的字节个数
char_length() 获取参数值的字符个数
concat(str1,str2,.....) :拼接字符串
upper()/lower() :将字符串变成大写 / 小写
substring(str,pos,length) :截取字符串 位置从 1 开始
instr(str, 指定字符 ) :返回子串第一次出现的索引,如果找不到返回 0
trim(str) :去掉字符串前后的空格或子串 ,trim( 指定子串 from 字符串 )
lpad(str,length, 填充字符 ) :用指定的字符实现左填充将 str 填充为指定长度
rpad(str,length, 填充字符 ) :用指定的字符实现右填充将 str 填充为指定长度
replace(str,old,new) :替换,替换所有的子串
-- 分组函数  sum() 也称为聚合函数 统计函数 ,把多行数据处理为一行


SELECT SUM(height) FROM student


-- 单行函数
-- 字符函数
-- length():获取参数值的字节个数
SELECT LENGTH(NAME) FROM student

-- char_length()获取参数值的字符个数
SELECT CHAR_LENGTH(NAME) FROM student

-- concat(str1,str2,.....):拼接字符串
SELECT num,CONCAT(NAME,':',gender) FROM student

-- upper()/lower():将字符串变成大写/小写
SELECT UPPER(NAME),LOWER(NAME) FROM student

-- substring(str,pos,length):截取字符串 位置从1开始
SELECT SUBSTRING(NAME,1,2) FROM student

-- instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR(NAME,'张') FROM student

-- trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)
SELECT CHAR_LENGTH(TRIM(NAME)) FROM student
SELECT TRIM('张' FROM NAME) FROM student

-- lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度
SELECT LPAD(NAME,5,'a'),RPAD(NAME,5,'a') FROM student

-- rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度
-- replace(str,old,new):替换,替换所有的子串
SELECT REPLACE(NAME,'张','王')FROM student

单行函数

 逻辑处理

case when 条件 then 结果1 else 结果2 end; 可以有多个when
ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回
原本的值
if函数:if else的 效果 if(条件,结果1,结果2)
-- 逻辑处理
/*case when 条件 then 结果1 else 结果2 end; 可以有多个when

ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回
原本的值
if函数:if else的 效果 if(条件,结果1,结果2)
*/

SELECT NAME ,
      (CASE WHEN height>1.8 THEN '高个子'
            WHEN height>1.7 THEN '正常个子'
            ELSE '矮个子' END) AS height,
            gender
            FROM student
            
 SELECT NAME ,IFNULL(address,'未录入') AS address FROM student
            
            
            SELECT NAME ,IF(height>1.8 ,'高个子','正常个子') AS height  FROM student

单行函数

 数学函数

round( 数值 ) :四舍五入
ceil( 数值 ) :向上取整,返回 >= 该参数的最小整数
floor( 数值 ) :向下取整,返回 <= 该参数的最大整数
truncate( 数值 , 保留小数的位数 ) :截断,小数点后截断到几位
mod( 被除数 , 除数 ) :取余,被除数为正,则为正;被除数为负,则为负
rand() :获取随机数,返回 0-1 之间的小数
-- 数学函数
                -- round(数值):四舍五入
SELECT NAME ,ROUND(height) FROM student  
              SELECT NAME ,ROUND(height,1) FROM student  
                
               -- ceil(数值):向上取整,返回>=该参数的最小整数  FLOOR(数值):向下取整,返回<=该参数的最大整数
               SELECT NAME ,CEIL(height) , FLOOR(height) FROM student
                
               -- truncate(数值,保留小数的位数):截断,小数点后截断到几位
               SELECT NAME,TRUNCATE(height,1) FROM student 
               
              --  mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
              SELECT NAME, MOD(-num,3),MOD(num,2) FROM student              
              
                RAND():获取随机数,返回0-1之间的小数
                SELECT NAME ,RAND() FROM student
            
            
            
           
            
单行函数

日期函数

now() :返回当前系统日期 + 时间
curdate() :返回当前系统日期,不包含时间
curtime() :返回当前时间,不包含日期
可以获取指定的部分,年、月、日、小时、分钟、秒
YEAR( 日期列 ),MONTH( 日期 ),DAY( 日期 ) ,HOUR( 日期 ) ,MINUTE( 日期 )
SECOND( 日期 )
str_to_date( 字符串格式日期 , 格式 ) :将日期格式的字符转换成指定格式的日期
date_format( 日期列 , 格式 ) :将日期转换成字符串
datediff(big,small) :返回两个日期相差的天数
  
            -- now():返回当前系统日期+时间
            SELECT NOW(), CURDATE(),CURTIME() FROM student
            -- curdate():返回当前系统日期,不包含时间
            -- curtime():返回当前时间,不包含日期
            
            
            -- str_to_date(字符串格式日期,格式):将日期格式的 字符 转换成 指定格式的日期
SELECT STR_TO_DATE('2022-09-10','%Y-%m-%d')  FROM student          
            
            -- date_format(日期列,格式):将日期转换成字符串
            SELECT DATE_FORMAT(birthday,'%Y-%m') FROM student
            -- datediff(big,small):返回两个日期相差的天数
            
            SELECT DATEDIFF(CURDATE(),birthday) FROM student
            

分组函数:做统计使用,又称为统计函数、聚合函数、组函数

分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类: sum 求和、 avg 平均值、 max 最大值、 min 最小值、 count 计数 (非空)
1.sum avg 一般用于处理数值型 max min count 可以处理任何类型
2. 以上分组函数都忽略 null
3.count 函数的一般使用 count * )用作统计行数
4. 和分组函数一同查询的字段要求是 group by 后的字段

SELECT SUM(height) FROM student;-- 身高总和
SELECT AVG(height) FROM student;-- 平均身高
SELECT MAX(height) FROM student;-- 最高身高
SELECT MIN(height) FROM student;-- 最低身高
-- COUNT(*) COUNT(1) COUNT(address) 统计的值出现null则不会统计
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student;
SELECT COUNT(address) FROM student;

条件查询

使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。
语法 :select < 结果 > from < 表名 > where < 条件 >
比较
=, != <>, >, <, >=, <=
逻辑运算
and
or
not
条件查询
模糊查询
LIKE
:是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值
或数值型.
通配符: % 任意多个字符
between and 两者之间,包含临界值;
in 判断某字段的值是否属于in列表中的某一项
IS NULL(为空的)或 IS NOT NULL(不为空的)

UNION 的语法如下:

[SQL 语句 1]
UNION
[SQL 语句 2]
2 UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,
mysql 会把所有的记录返回,且效率高于union 。
/*
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,
mysql 会把所有的记录返回,且效率高于union
*/
-- union 会删除重复的记录
SELECT  address FROM student WHERE address='汉中'
UNION
SELECT address FROM student WHERE address='西安'
-- UNION ALL只是合并
SELECT  address FROM student WHERE address='汉中'
UNION ALL
SELECT address FROM student WHERE address='西安'

排序

查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC ,asc代表的是升序,desc代表的是降序,如果不写,默认是升序 order by子句中可以支持单个字段、多个字段

数量限制

limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)
SELECT * FROM table LIMIT offset rows;
SELECT * from table LIMIT 0,5;
/*
数量限制
limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)
SELECT * FROM table LIMIT offset rows;
SELECT * from table LIMIT 0,5;
*/
-- 只查询一部分,提高效率 如场景 数据分页显示
SELECT * FROM student LIMIT 0,2
SELECT * FROM student LIMIT 2,2
-- limit(n-1)*2 2 n 当前页码

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Sakila是MySQL官方提供的一个样例数据库,用于演示和练习MySQL数据库的使用。数据库包含了一个虚构的DVD租赁店的数据,其中包括客户、电影、租赁记录等等。 Sakila数据库包含16张表,包括: 1. `actor`:演员表,包含演员的ID、名字和最后更新时间。 2. `address`:地址表,包含地址的ID、地址、邮编、电话和最后更新时间。 3. `category`:电影类别表,包含类别的ID和名称以及最后更新时间。 4. `city`:城市表,包含城市的ID、城市名称、国家ID和最后更新时间。 5. `country`:国家表,包含国家的ID、国家名称和最后更新时间。 6. `customer`:客户表,包含客户的ID、姓名、地址、邮编、电话、积分、注释和最后更新时间。 7. `film`:电影表,包含电影的ID、标题、描述、发行年份、语言ID、原始语言ID、租金、长度、评级和最后更新时间。 8. `film_actor`:电影演员表,包含电影ID和演员ID。 9. `film_category`:电影类别表,包含电影ID和类别ID。 10. `inventory`:库存表,包含DVD的ID、电影ID和最后更新时间。 11. `language`:语言表,包含语言的ID、名称和最后更新时间。 12. `payment`:支付表,包含支付的ID、客户ID、租赁ID、支付时间、租赁时长和支付金额。 13. `rental`:租赁表,包含租赁的ID、客户ID、电影ID、租赁时间和最后更新时间。 14. `staff`:员工表,包含员工的ID、姓名、地址、邮编、电话、邮箱、店铺ID、用户名、密码和最后更新时间。 15. `store`:店铺表,包含店铺的ID、地址、邮编、电话和最后更新时间。 16. `sales_by_film_category`:按电影类别统计销售额的视图,包含类别名称和销售额。 使用Sakila数据库可以练习SQL查询、联结、聚合、子查询等等操作,是学习MySQL的很好的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再拼一次吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值