5.1.2SQL语句实例

总目录:https://www.jianshu.com/p/e406a9bc93a9

数据库 - 子目录:https://www.jianshu.com/p/4499e57a5604

Yuan先生的数据库基础:https://www.cnblogs.com/yuanchenqi/articles/6357507.html

登录

mysql -u用户名 -p

password:密码

数据库操作(DDL)

创建数据库

语法

create database [if not exists] db_name [default character set] [default collate]

create database语句创建指定的数据库

如果数据库已经存在并且没有声明if not exists程序就会报错,声明了if not exists则会取消创建该数据库,继续执行下面的语句。

db_name设置数据库名

default character set设置数据库的默认编码

default collate设置数据库的默认排序规则

一个完整的例子
一个简单的例子

查看数据库

语法

show databases;                                查看所有数据库

show create database db_name;       查看数据库的创建方式

查看所有数据库
查看数据库的创建方式


修改数据库

语法

alter database  db_name [default character set] [default collate]

例子

数据库更名操作   建议使用可视化工具。


删除数据库

语法

drop database [if exists] db_name;

删除数据库

从删库到跑路。

进入/切换数据库

语法

use db_name;

进入数据库

查看当前数据库

语法

select database();

查看当前数据库

这个方法也可以在刚登入时用来查看所有数据库。


mysql数据类型

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。


数值类型

下面的表显示了需要的每个整数类型的存储和范围。


日期/时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。


字符类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。

BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。

有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。


数据表操作


基础操作

创建表

语法

CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];

创建一个职工表

约束:

      primary key (非空且唯一)  :能够唯一区分出当前记录的字段称为主键!

      unique:唯一索引

      not null:非空

      auto_increment 主键字段必须是数字类型。

      外键约束 foreign key  


查看表信息

    desc tab_name                             查看表结构

    show columns from tab_name      查看表结构

查看表结构

 show tables 查看当前数据库中的所有的表

查看表

    show createtable tab_name    查看当前数据库表建表语句


修改表结构

增加字段

语法

alter table tab_name add[column] 列名 类型[完整性约束条件][first|after 字段名];

增加字段

增加多个字段

修改列名

语法

alter table tab_name change [column] 列名 新列名 类型 [完整性约束条件][first|after 字段名];

将addr2改成addr3

删除一列

语法

alter table tab_name drop [column] 列名;

删除掉employee中的addr列。

修改表名

语法

rename table 表名 to 新表名;

修改表名

修改数据集

语法

alter table 表名 character set XX;


删除表

语法

drop table tab_name;

删除表


添加/删除主键

语法

alter table tab_name add primary key(字段名称,...)

alter table tab_name drop primary key;

如何真正删除主键

alter table tab_name modify id int;

auto_increment没了,但这样写主键依然存在,所以还要加上下面这句

alter table tab_name drop primary key;

仅仅用这句也无法直接删除主键



表纪录操作

语法

insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......);

我们先建立一个学生表

建表

然后第一种增加记录的方式。

增加一条记录

也可以空一些字段

省略字段

如果全字段追加,不需要有字段列表。

全字段追加

还可以一次追加多条记录。

增加多条记录

还有set插入

set


语法

delete from tab_name [where ....]

删除id为7的记录。

如果不跟where语句则删除整张表中的数据。

delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop。

TRUNCATE TABLE也可以删除表中的所有数据,词语句首先摧毁表,再新建表。此种方式删除的数据不能在事务中恢复。


语法

update tab_name set field1=value1,field2=value2,......[where 语句]

我们把id为6的这一行的name改为王红。

同时age增加1。


单表查询

准备表与数据。

普通查询

语法

SELECT *|field1,filed2 ... FROM tab_name

                  WHERE 条件

                  GROUPBY field

                  HAVING 筛选

                  ORDERBY field

                  LIMIT 限制条数

查询表中所有学生的信息。

查询表中所有学生的姓名和对应的英语成绩。

过滤表中重复数据。

select 也可以使用表达式,并且可以使用: 字段 as 别名或者:字段 别名

在所有学生分数上加10分特长分显示。

统计每个学生的总分。

使用别名表示学生总分。


条件查询

查询姓名为XXX的学生成绩

查询英语成绩大于90分的同学

查询总分大于200分的所有同学


where字句中可以使用:比较运算符,通配符,逻辑运算符。

查询JS分数在 70-100之间的同学。

查询Django分数为75,76,77的同学。

查询所有姓王的学生成绩。

查询JS分>90,Django分>90的同学。

查找没有分配班级的学生的姓名


排序查询

Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的别名。

语法

select *|field1,field2... from tab_name order by field [Asc|Desc]

Asc 升序、Desc 降序,其中asc为默认值 。

ORDER BY 子句应位于SELECT语句的结尾。  

对JS成绩排序后输出。

对总分排序按从高到低的顺序输出。

对姓王的学生年龄排序输出


分组查询

数据表建立

对购物表按类名分组后显示每一组商品的价格总和。

对购物表按类名分组后显示每一组商品价格总和超过150的商品。

having 和 where两者都可以对查询结果进行进一步的过滤,差别有:

<1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;

<2>使用where语句的地方都可以用having进行替换

<3>having中可以用聚合函数,where中就不行。


聚合函数

COUNT(列名):

统计一个班级共有多少学生?

统计JS成绩大于70的学生有多少个?

统计总分大于280的人数有多少?

注意:count(*)统计所有行; count(字段)不统计null值.

SUM(列名):

统计一个班级JS总成绩

统计一个班级各科分别的总成绩

统计一个班级各科的成绩总和

统计一个班级JS成绩平均分

AVG(列名):

求一个班级JS平均分

求一个班级总分平均分


MAX():

求班级最高分


MIN():

求班级最低分


where和having

Mysql在执行sql语句时的执行顺序:

from 

where 

select  (as)

group by 

having 

order by

limit

limit子句用于限制查询结果返回的数量,常用于分页查询

select * from tab_name limit i,n

i:为查询结果的索引值(默认从0开始),当i=0时可省略i

n:为查询结果返回的数量# i与n之间使用英文逗号","隔开

查找第一条记录
查找第二条记录后五条


正则表达式

查找以yu开头的name

查找以n结尾的name

查找带l的name


多表查询

创建表

连接查询

笛卡尔积查询

内连接

查询两张表中都有的关联数据,相当于利用条件从笛卡尔积结果中筛选出了正确的结果。

外连接

左外连接

在内连接的基础上增加左边有右边没有的结果

右外连接

在内连接的基础上增加右边有左边没有的结果

全外连接

在内连接的基础上增加左边有右边没有的和右边有左边没有的结果

右连接 UNION 左连接

复合条件连接查询

查询员工年龄大于等于25岁的部门

以内连接的方式查询employee和department表,并且以age字段的升序方式显示


子查询

子查询是将一个查询语句嵌套在另一个查询语句中。

内层查询语句的查询结果,可以为外层查询语句提供查询条件。

子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字

还可以包含比较运算符:= 、 !=、> 、<等

带IN关键字的子查询

查询employee表,但dept_id必须在department表中出现过

带比较运算符的子查询

查询员工年龄大于等于25岁的部门



带EXISTS关键字的子查询

EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值。Ture或False,当返回Ture时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询


没有dept_id等于205的记录,返回为false,外层查询语句不进行查询,查询为空。


完整性约束之主键约束

<1> 一张表只能有一个主键

<2> 主键类型不一定非是整型

单字段主键

主键字段特点:非空且唯一

多字段联合主键


完整性约束之外键约束

环境:每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任

教师表
学生表

外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/update

外键约束对父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时父表的行为取决于在定义子表的外键时指定的on update/on delete子句

创建外键

子句语法

[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]

REFERENCES <主表名> 主键列1 [,主键列2,…]

删除直接用drop。

ON语句

cascade方式

在父表上update/delete记录时,同步update/delete掉子表的匹配记录

外键的级联删除:如果父表中的记录被删除,则子表中对应的记录自动被删除


set null方式

在父表上update/delete记录时,将子表上匹配记录的列设为null

要注意子表的外键列不能为not null


Restrict方式

拒绝对父表进行删除更新操作


No action方式

在mysql中同Restrict,如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 系统用户: 1.sys system(sys权限最高) 2.sysman(操作企业管理器) 密码是安装的时候输入的...
    3hours阅读 1,516评论 0 0
  • 1. 了解SQL 1.1 数据库基础 ​ 学习到目前这个阶段,我们就需要以某种方式与数据库打交道。在深入学习MyS...
    锋享前端阅读 1,025评论 0 1
  • 数据库的基本是概念名词解释: 数据库名词解释 元组:可以理解为表的每一行就是一个元组 候选码:若关系中的某一属性组...
    杰伦哎呦哎呦阅读 1,093评论 0 6
  • .数据库 数据库的发展: 文件系统(使用磁盘文件来存储数据)=>第一代数据库(出现了网状模型,层次模型的数据库)=...
    小Q逛逛阅读 953评论 0 2
  • 作为一本介绍投资知识、强调财商智慧的大众通俗读物,“富爸爸”系列丛书不仅带给读者耳目一新的投资观念,冲击了陈旧的理...
    无以慰风尘阅读 614评论 2 6