MySQL基础篇1

MySQL 基础篇1


数据库概述


  • 数据库:为了方便数据的存储和管理,它将数据按照特定的规则存储在磁盘上,就是一个存储数据的仓库。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据

  • DB,DBMS,SQL

    DB:数据库(DataBase)

    存储数据的容器,保存了一系列有组织的数据

    DBMS:数据库管理系统(DataBase Management System)

    又称为数据库软件或数据库产品,用于创建或管理DB

    SQL: 结构化语言(Structure Query Language)

    用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库通用的语言
    在这里插入图片描述

  • 根据不同存储类型分类:关系数据库,非关系数据库

  • 关系数据库

表与表之间的关联关系

MySQL :快捷、可靠、开源、免费

Qracle :功能强大,收费

SQL Server(微软):只能安装在Windows操作系统

DB2(IBM): 适合处理海量数据,收费

  • 非关系数据库

MongdoDB

Redis

Mysql数据库


  • 语法规范
    • 不区分大小写,建议关键字大写,表明,列名小写
    • 每句话用 ;
  • 注释
    • 单行注释:#注释文字
    • 单行注释:–(空格)注释文字
    • 多行注释:/* 注释 */
  • SQL优点
    • 不是某个特定数据库供应商专有的语言,几乎所以DBMS都支持SQL
    • 简单易学
    • 实际上强有力的语言,灵活使用可以进行非常复杂和高级的数据库操作

SQL–DDL


  • 数据(结构)定义语言DDL

结构定义,创建数据库,创建表和修改表结构的语言

  • 创建,删除数据库

    • 创建数据库并设置编码格式

    CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARSET utf8]

    • 删除数据库

    DROP DATABASE 数据库名;

    • 修改字符集

    ALTER DATABASE 数据库名 CHARSET gbk;

  • 数据库表

数据库由表组成

行 列

一行就是一条记录

一列就是一个信息

  • 创建表

存储什么信息—表名

表中存储那些信息—列名

列的数据类型

  • 字符型

char 定长的 例如定义长度为5,如果只存储了2个字符,也是会补全到5个字符

varchar 变长的 例如定义长度为5,如果只存储了2个字符,实际只占了2个字符

  • 日期型

date 年月日(日期)

datetime 年月日时分秒(时间)

  • 数值型

浮点

float

double 常用的 精度高

  • 整数

TINYINT 1

SMALLINT 2

MEDTUMINT 3

INT 4

BIGINT 8

text 文本类型,可以存储更多的字符

  • 主键
    在一张表中代表唯一的一条记录,不能为空,不能重复
  • 约束
    PRIMARY KEY 设置主键约束
    NOT NULL 不能为空约束
    UNIQUE 唯一性约束
    检查约束 设置条件
    外键约束
  • 主键自动增长
    AUTO_INCREMENT
  • 默认值
    DEFAULT default_value
  • 字段注释
    comment ‘注释’
  • 创建表语法
    CREATE TABLE 表名(列名 数据类型 [约束] [默认值] [ 注释],…)
    CREATE TABLE t_user(
    id INT [PRIMARY KEY NOT NULL AUTO_INCREMENT],
    number INT(5) NOT NULL,
    stuname VARCHAR(10) NOT NULL,
    age INT(3) CHECK(age>18),
    birthday DATE, weight DOUBLE,
    opertime datetime,
    [CONSTRAINT 约束名 约束规则]
    )
    eg:
-- 创建NBA管理系统数据库
CREATE DATABASE IF NOT EXISTS NBAdb CHARSET utf8;

-- 创建球队信息表
CREATE TABLE team(
    tno INT PRIMARY KEY AUTO_INCREMENT COMMENT '球队编号 主键',
    tname VARCHAR(5) NOT NULL COMMENT '球队名称',
    address VARCHAR(50) COMMENT '所在地'
)

-- 创建球员信息表
CREATE TABLE player(
    pno INT PRIMARY KEY AUTO_INCREMENT COMMENT '球员编号 主键',
    pname VARCHAR(10) NOT NULL COMMENT '名字',
    birthday DATE NOT NULL COMMENT '生日',
    height INT NOT NULL COMMENT '身高',
    weight INT NOT NULL COMMENT '体重',
    pposition CHAR(2) COMMENT '位置'

)
  • 删除表,修改表名
    删除表
    DROP TABLE [if exists ]表名
    修改表名
    RENAME TABLE 旧表名 TO 新表名
    复制表结构
    CREATE TABLE 新表名 LIKE 被复制表名;

SQL–DML


  • DML----数据操作(对数据进行增,删,改操作)会改变数据
  • INSETRT
  • 插入数据
-- 插入一条数据
INSERT INTO team(tno,tname,address)VALUE(1,'湖人','洛杉矶')
-- 插入多条数据
INSERT INTO team(tno,tname,address)
          VALUES(1,'湖人','洛杉矶'),
                (2,'火箭','休斯顿'),
                (3,'凯尔特人','波士顿'),
                (4,'骑士','克利夫兰'),
                (5,'马刺','圣安东尼奥'),
                (6,'魔术','奥兰多')

-- 自定义插入需要的属性内容(前提在与建表时的约束不冲突)
INSERT INTO team SET tname = '王五',gender = '男'

-- 将所查询的语句插入数据(前提是查询的列数与插入的列数匹配)
INSERT INTO stu (num,sname,gender,birthday) SELECT num,sname,gender,birthday FROM student
                
  • 修改,删除数据
-- 修改数据(想修改哪一列,把列名一改即可)
UPDATE student SET gender ='男'

-- 删除数据
-- 删除条件所对应的数据
DELETE FROM student where sname = "王五"
-- 删除表结构
DROP TABLE stu 
-- 清空整张表
TRUNCATE TABLE student 

SQL–DQL----基础查询


  • DQL----(Data Query Language)
    数据查询语言是使=使用频率最高的一个操作,可以从一个表中查询数据,也可一从多个表中查询数据。(查询语言,查询结果处理,函数,查询条件,分组,排序,数量限制…)
  • 语法
    select 查询列表 from 表名
  • 查询结果处理
    特定列查询:select column1,column2 from table
    全部列查询: select * from table
    算数运算符:+ - * /
    排除重复行: select distinct column1,column2 from table
    查询函数:select 函数; / 例如version()
/*
   查询结果
   select 结果 指定列  是建议的
   select column1 column2... from 表名
 */
  SELECT num,sname,gender FROM student
  -- 查询所有的列  
  SELECT * FROM student
  
  -- 查询结果使用算数运算符+-*/   + 只能作为算数运算
  SELECT num,sname,height+1 FROM student
  SELECT num,sname,height+num FROM student
  
  -- DISTINCT 去除重复数据,重复数据指的是每列的值都是相同的.
  SELECT DISTINCT sname,gender FROM student
  • 查询结果处理----函数
  • 函数:类似于Java中的方法,将一组逻辑语句事先在数据库中定义好,可以直接调用
  • 好处
    隐藏了实现的细节
    提高了代码的重用性
  • 调用:select 函数(实参列表)[from 表]
  • 分类
    单行函数:如:concat、length、ifnull等(会对每一行数据进行处理)
    分组函数:做统计使用,又称为统计函数、聚合函数、分组函数(将多条结果转为一条)
/*
     字符串处理
     逻辑处理
     日期
     算数   
  */ 
   -- length(列名) 返回列的长度 以字节为单位 中文3个字节 
   SELECT num,LENGTH(sname) FROM student
   
   -- char_length(列名) 以字符为单位的长度
   SELECT num,CHAR_LENGTH(sname)sname FROM student
   
   -- concat("","",""....) as 别名
   SELECT CONCAT(num,":",sname,":",gender)AS studentInfo FROM student
   
   SELECT UPPER(sname)FROM student
   SELECT LOWER(sname)FROM student
  
  -- SUBSTRING(列,开始位置,截取长度)
   SELECT num,SUBSTRING(sname,2,2) FROM student
   
   -- instr(列名,查找的字符) 返回指定字符在字符串中首次出现的位置
   SELECT num,INSTR(sname,"i") FROM student
 
   -- trim(列名) 去掉前后的空格
   SELECT CHAR_LENGTH(TRIM(sname)) FROM student 
   
   -- trim(子串 from 列名)  去掉列名前后的指定子串
   SELECT TRIM("a" FROM sname) FROM student 
   
   -- 左填充指定内容到指定长度  
   SELECT LPAD(sname,5,"a"),RPAD(sname,5,"a") FROM student 
   
   -- 替换
   SELECT REPLACE(sname,"i","I") FROM student
  • 单行函数----对查询结果进行逻辑处理
-- 对查询结果进行逻辑处理
SELECT num,sname,
       (CASE WHEN height>=1.80 THEN '大高个' ELSE '不是大高个' END)height,
       (CASE 
            WHEN height>=1.80 THEN '大高个'
            WHEN height<1.80 AND height>1.60 THEN '中等'
            ELSE '低个子' END)height                                 
      FROM student
  
 -- ifnull(列,默认值) 
 SELECT num,sname,IFNULL(address,'暂未录入')  FROM student 
 
 -- if(条件,条件成立返回,不成立返回)
 SELECT num,sname,IF(height>1.80,'大高个子',"不是大高个")height    FROM student
   
   
   
  SELECT num,sname,ROUND(height) FROM student 
  SELECT num,sname,FLOOR(height) FROM student 
  -- 截断  不会进位     RAND() 随机生成 0-1之间的随机数
 SELECT num,sname,TRUNCATE(height,1),RAND() FROM student 
   
   
 SELECT num,sname,NOW(),CURDATE(),CURTIME() FROM student
   
   
 SELECT num,sname,YEAR(birthday),MONTH(birthday) FROM student
 -- 字符串转 日期类型
 SELECT STR_TO_DATE('2002-1-1',"%Y-%m-%d") FROM student
 -- 日期转字符串类型 
 SELECT DATE_FORMAT(birthday,"%Y-%m")birthday FROM student  
 
 SELECT DATE_FORMAT(birthday,"%Y")birthday FROM student  
 
 -- 计算两个日期之间的天数
 SELECT DATEDIFF(CURDATE(),birthday) FROM student

  • 分组函数
  • 分类
    sum 求和、avg 平均值、max 最大值 、 min 最小值、count 计数(非空)
 -- sum() avg()只能处理数值类型的列
 -- max() min() count() 可以处理任何数据类型
 SELECT SUM(height),AVG(height),MAX(height),MIN(height) FROM student
 
 SELECT COUNT(*) FROM student
 SELECT COUNT(num) FROM student
 SELECT MAX(sname),MIN(sname) FROM student
  • 条件查询
    使用where子句,将不满足条件的行过滤掉,where子句紧跟随from子句
    语法:select 结果 from 表名 where 条件
    比较: =, != 或<>, >, <, >=, <=
    逻辑:and or not
-- select 结果 from 表名  where 条件  
-- 条件  比较 =, != 或<>, >, <, >=, <=  逻辑 and or not

SELECT * FROM student WHERE gender = '男'
SELECT * FROM student WHERE gender != '男'
SELECT * FROM student WHERE gender <> '男'

SELECT * FROM student WHERE gender = '男' AND height>1.7 

SELECT * FROM student WHERE gender = '男' OR height>1.7 

SELECT * FROM student WHERE height = 1.78 OR height=1.88 OR height=1.90
SELECT * FROM student WHERE height IN(1.78,1.88,1.90)
SELECT * FROM student WHERE height NOT IN(1.78,1.88,1.90)
  • 条件查询
    模糊查询
    LIKE :是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值或数值型.
    通配符: % 任意多个字符,包含0个字符 _ 任意单个字符
    between and 两者之间,包含临界值;
    in 判断某字段的值是否属于in列表中的某一项
    IS NULL(为空的)或 IS NOT NULL(不为空的)
-- is null  查询值为空的
SELECT * FROM student WHERE  address IS NULL
SELECT * FROM student WHERE  address IS NOT NULL

SELECT * FROM student WHERE   height>=1.70 AND height<=1.90

-- height BETWEEN 1.70 AND 1.90 之间
SELECT * FROM student WHERE   height BETWEEN 1.70 AND 1.90

-- like %关键字%  % 匹配任意个字符  _ 匹配一个字符
SELECT * FROM student WHERE sname LIKE "张_"
SELECT * FROM student WHERE sname LIKE "%三%"
  • UNION
    union :合并多个查询语句结果 可以去除多条结果中重复数据 多条查询结果列相同
    语法:
    [SQL 语句 1]
    UNION
    [SQL 语句 2]
-- union 合并多个查询语句结果  可以去除多条结果中重复数据   多条查询结果列相同
SELECT num FROM student WHERE gender = "男"
 UNION 
SELECT num FROM student 
  • UNION ALL
    union all :只是将多条查询简单合并 不会去除重复数据
    语法:
    [SQL 语句 1]
    UNION ALL
    [SQL 语句 2]
    当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,
    mysql 会把所有的记录返回,且效率高于union
-- union all 只是将多条查询简单合并  不会去除重复数据
SELECT * FROM student WHERE gender = "男"
 UNION  ALL
SELECT * FROM student 
  • 排序
    查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC
    asc代表的是升序,desc代表的是降序,如果不写,默认是升序
    order by子句中可以支持单个字段、多个字段
  • 数量限制
    limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)
    SELECT * FROM table LIMIT offset rows
    SELECT * from table LIMIT 0,5
-- 默认按主键从小到大排序
SELECT * FROM student 

-- order by 列  asc(升序) desc(降序)
SELECT * FROM student  ORDER BY reg_time ASC
SELECT * FROM student  ORDER BY reg_time DESC
SELECT * FROM student  ORDER BY height ASC
SELECT * FROM student  WHERE gender = "男" ORDER BY height ASC



SELECT * FROM student   ORDER BY height ASC, reg_time DESC


-- 分页显示数据  假设每页显示4条
 -- limit 开始的位置(从0开始),每次查询的数量
SELECT * FROM student WHERE num>0 ORDER BY num ASC  LIMIT 0,4
SELECT * FROM student WHERE num>0 ORDER BY num ASC  LIMIT 4,4
  • 分组查询
    group by 分组条件 把分组条件相同的数据划分到同一个组中处理
  • 子查询
  • where 是对分组前(表中的原始数据)筛选, HAVING对已经分组后的数据再进行筛选
-- 分组查询  group by 分组条件  把分组条件相同的数据划分到同一个组中处理
SELECT gender,COUNT(*),MAX(height),AVG(height) FROM student GROUP BY gender

-- 子查询
SELECT * FROM(SELECT gender,COUNT(*)c FROM student   GROUP BY gender)AS t WHERE t.c>3


-- where 是对分组前(表中的原始数据)筛选,  HAVING对已经分组后的数据再进行筛选
SELECT gender,COUNT(*)c FROM student WHERE num>0   GROUP BY gender HAVING c>3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值