day37-mysql

1、DDL

    常用数据类型
    创建表
        create table user(username varchar(30), password char(32));
    查看表结构
        desc user;
    查看表创建语句
        show create table user;
    删除表
        drop table user;
    创建表指定字符集和引擎
        create table user(username varchar(30), password char(32)) engine=innodb default charset=utf8;
    修改字段类型
        alter table user modify username varchar(20);
    添加字段
        alter table user add email varchar(30)
        alter table user add email varchar(30) after username;
    增删改查  curd操作
    首先通过mysql -uroot -p 进入数据库系统,创建数据库dudu,进入数据库dudu use dudu,然后才是创建表的过程
    所有的符号都是英文。
    创建表开始学习增删改
        mysql> create table user(
            -> id int auto_increment,
            -> name varchar(30) not null,
            -> money int not null,
            -> province varchar(20) default null,
            -> age tinyint unsigned not null,
            -> sex enum('女', '男') not null,
            -> primary key(id)
            -> )engine=innodb default charset=utf8;
        【注】单选在插入值的时候,可以直接使用1 2,那么1代表女,2代表男,enum类型如不不给值,默认是第一个
    
    set类型如何插入?
        set('吃', '喝', '嫖', '赌', '抽')
             1     2     4    8     16
             4|8|16      如果是后三个,可以这么写
             28          也可以加起来,这么写
  • 指定字段查询
类别 详细解释
基本语法 select 字段 from 表;
示例 select id,name,money from star;
示例说明 查询star表中id,name,money字段
  • 指定字段组合不重复记录
类别 详细解释
基本语法 select distinct 字段 from 表;
示例 select distinct age,sex from star;
示例说明 查询star表中age和sex组合的不重复结果
  • 条件查询
类别 详细解释
基本语法 select 字段 from 表 where 条件;
示例 select * from star where age=43;
示例说明 查询age为43的所有结果
  • where后可接的条件
符号 说明
> 大于
< 小于
>= 大于等于
<= 小于等于
!=或<> 不等于
= 等于
or 或者
and 并且
between and 在某个闭区间
in / not in 在/不在指定的集合中
like 模糊查询
  • 举例
示例 说明
select * from star where id<10 and province='湖北'; 查询star表中所有id小于10并且province为湖北
select * from star where id between 3 and 10; 查询star表中所有id在[3,10]的闭区间的记录
select * from star where id in (3,4,8,10); 查询star表中所有id在指定集合中的记录
  • 结果集排序
类型 说明
基本语法 select 字段 from 表 order by字段 排序关键词
示例 select id,name,money from star order by money desc;
示例说明 查询star表中的id,name,money字段,按照余额进行降序排序
关键词 说明
asc 升序排列,从小到大(默认)
desc 降序排列,从大到小
  • 多字段排序
类型 说明
基本语法 select 字段 from 表 order by 字段1 desc or asc,...,字段n desc or asc;
示例 select id,name,money from star order by money desc,age asc;
示例说明 查询star表中的id,name,money字段,按照余额进行降序排序,若余额全都一样,则再使用age进行升序排序
  • 限制查询的结果集
类型 说明
基本语法 select 字段 from 表 limit数量;
示例 select id,name,money from star limit 5;
示例说明 显示前五个记录

【对于查询或者排序后的结果集,如果希望只显示一部分,使用limit关键字对结果进行数量限制】

  • 限制排序后的结果集
类型 说明
基本语法 select 字段 from 表 order by 字段 排序规则 limit 数量
示例 按照money来排序,显示前5个最有钱的记录
  • 结果集区间选择
类型 说明
基本语法 select 字段 from 表 limit 偏移量,数量
示例 select id,name,money from star limit 0,3;
示例说明 取从第一条开始的三条记录
  • 常用统计函数
类型 说明
sum 求和
count 统计总数
max 最大值
min 最小值
avg 平均值
  • 统计函数使用
类型 说明
基本语法 select 函数(字段) from 表
示例 select count(id) from star;
示例说明 查询star表的id总数
  • 分组
类型 说明
基本语法 select * from 表 group by 字段
示例 select * from star group by province;
示例说明 按照province进行分组
  • 分组统计
类型 说明
基本语法 select * from 表 group by 字段
示例 select count(*),province from star group by province;
示例说明 对分组进行单独统计
  • 结果集过滤
类型 说明
基本语法 select * from 表 group by 字段 having 条件
示例 select count(province) as result,province from star group by province having result>2;
示例说明 对province分组并统计总数,将分组结果中大于2的分组显示出来
  • 整体使用SQL
类型 说明
select 选择的列
from
where 查询的条件
group by 分组属性having分组过滤的条件
order by 排序属性
limit 起始记录位置,取记录的条数

2、DML

    增删改语句
    
操作前的准备
create table user(
          id int auto_increment,
          name varchar(30) not null,
          money float not null,
          province varchar(32) default null,
          age tinyint unsigned not null,
          sex tinyint not null,
          primary key(id)
)engine=innoDB defaultcharset=utf8;
  • 插入记录1
类别 详细解释
基本语法 insert into 表 values(值1,值2,值n);
示例 insert into star values('王宝强',0,'河北',32,0);
示例说明 向user表中插入值id为1,姓名为王宝强,余额为0,省份为河北,年龄为32,性别为0(男)
  • 插入记录2
类别 详细解释
基本语法 insert into 表(字段1,字段2,字段n) values (值1,值2,值n);
示例 insert into star (name,money,province,age,sex) values ('郭德纲',1000000,'天津',43,0);
示例说明 向user表中插入值,姓名为郭德纲,余额为1000000,省份为天津,年龄为43,性别为0(男)

【注意】

  • 插入数据可以不传值的情况:
    1.自增的字段可以不用传值(每插入一条该字段的值会自动加1)
    2.有默认值
    3.可为空的字段可以不传值
  • 插入记录2的方式为更为常用的用法
  • 删除记录
类别 详细解释
基本语法 delete from 表 where 条件;
示例 delete from star where id=1;
示例说明 删除表中id为1的行
  • 修改记录
类别 详细解释
基本语法 update 表 set 字段1=值1,字段2=值2 where 条件;
示例 update star set money=100,sex=1 where id=5;
示例说明 将star表中id为1的行的money设为100,sex设为1
  • 基础查询
类别 详细解释
基本语法 select * from 表;
示例 select * from star;
示例说明 查询star表中所有字段的所有结果

3、可视化工具

    当你去操作数据库的时候,其实有3中方式
    (1)使用mysql自带的客户端进行操作
    (2)使用一些第三方的可视化工具管理数据库  比如navicate、sqlyog
    (3)使用代码去操作数据库,比如python、java、php

4、DQL

    query : 查询
    模糊查询:like  '%德%'  只要有 德 字的都符合要求
            % 代表任意多的字符
            like '柳_'   叫 柳某 的都符合要求
            _ 代表一个任意字符
    limit:
        limit 2 : 在结果集中只要前两个
        limit offset, number : offset代表偏移量,number代表数量
        LIMIT number1 OFFSET number2 : number1 是数量  number2 是偏移量
    
    上网的时候,经常会有分页,每页显示10条,
    第一页:select * from table limit 0, 10
    第二页:select * from table limit 10, 10
    第三页:select * from table limit 20, 10
    第n页:select * from table limit (n-1)*10, 10

    分组:
        字段只能出现分组字段和统计信息,其它的字段出现没有意义
        select province, count(*) from user group by province;
        select province, count(*) as c from user group by province having c>=2;
        【注】having经常跟在group by的后面,where是跟在表的后面
    select使用顺序
        SELECT xxx FROM xxx WHERE xxx GROUP BY xxx HAVING xxx ORDER BY xxx LIMIT xxx;
        取出拥有年龄大于30岁的明星个数大于两个且第二多的省份
    多表联合
        mysql> create table user(
            -> id int auto_increment,
            -> name varchar(30) not null,
            -> gid varchar(10) default 0,
            -> primary key(id)
            -> )engine=innodb default charset=utf8;

        mysql> create table goods(
            -> gid int auto_increment,
            -> name varchar(30) not null,
            -> price int not null,
            -> category varchar(20) not null,
            -> primary key(gid)
            -> )engine=innodb default charset=utf8;

        mysql> insert into user(name, gid) values('郭德纲', 1),
            -> ('岳云鹏', 2),
            -> ('曹云金', 0),
            -> ('于谦', 3),
            -> ('牛群', 1),
            -> ('冯巩', 1),
            -> ('大兵', 4),
            -> ('马三立', 0),
            -> ('贾玲', 2);
        
        隐式内连接
            select user.name as uname, goods.name as gname from user, goods where user.gid=goods.gid;
        显示内连接
            select * from user as u join goods as g on u.gid=g.gid;
            select u.name as uname, g.name as gname from user as u join goods as g on u.gid=g.gid;
        三表链接格式
            select * from user as u join goods as g on u.gid=g.gid join price as p on g.pid=p.pid
  • 隐式内连接
类型 说明
基本语法 select 表1.字段[as 别名],表n.字段 from 表1[别名],表n where 条件;
示例 select username,name from user ,goods where user.gid=goods.gid;
示例说明 查询用户表中哪些用户购买过商品,并将商品信息显示出来

【说明:以上方式称为隐式内连接,因为没有出现join关键字】

  • 显式内连接
类型 说明
基本语法 select 表1.字段[as 别名],表n.字段 from 表1 inner join 表2 on 条件;
示例 select username,name from user inner join goods on user.gid=goods.gid;
示例说明 查询用户中哪些用户购买过商品,并将商品信息显示出来

【说明:以上方式的inner关键字换成cross同样可以,其实也可以省略】

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

推荐阅读更多精彩内容