day3sql语句

sql的基础应用和元数据的获取

1.SQL介绍

  结构化的查询语言。关系型数据库中通用的一种命令,使用sql_mode规范sql语句的语法标准

2. SQL_mode,规范sql语句是确保数据有意义

  mysql> select @@sql_mode;
  ONLY_FULL_GROUP_BY,
  STRICT_TRANS_TABLES,
  NO_ZERO_IN_DATE,
  NO_ZERO_DATE,
  ERROR_FOR_DIVISION_BY_ZERO,
  NO_AUTO_CREATE_USER,
  NO_ENGINE_SUBSTITUTION

以上查询结果都是不符合语法规范

3.SQL的常用分类

  DDL  数据定义语言
  DCL  数据控制语言
  DML  数据操作语言
  DQL 数据查询语言

4. 字符集和校对规则介绍

  字符集:常用utf编码三个字节定义一个汉字
  utf8         : 最多允许字符长度为3字节
  utfmb4    : 最多允许字符长度为4个字节
  gbk         :
  mysql> show charset;
  校对规则,排序规则
  ABCD
  mysql > show collation;

说明:字符集和校对规则可用作用与库与表级别的设定

5. 表的属性和列的属性介绍

表定义属性有:
存储引擎 : innoDB
字符集 &校对规则    utf8mb4
注释

 列的定义属性
    (1)数据类型 保证数据又意义
     tinyint : 占用1Bytes=8bit长度 范围 -128~127  0-        255最多存储一个字节长度数字
     int     : 4Bytes, 0-2^32,-2^31~2^31-1,10位数
     bigint  : 8Bytes, 0-2^64,-2^63~2^63-1,20位数
     (2)  字符串类型(万能)
    char(64) 括号里定义最长的字符串长度,最大      允许255字节
    varchar(64)最大允许65533字节长度
    char与varchar区别
    1. 定长  和 变长 
    2. 64代表了,最多可以存储字符的个数
    3. 字节限制 255 , 65535字节
    5. varchar 需要花费额外的1-2字节存储字符长    度
    如何选择: 根据
    1. 业务数据是定长还是变长,
    2. 字符长度
    大表:  数据类型选择会影响到查询的效率,同时选择      合适的数据类型也能节省磁盘
    enum 类型格式为('山东省','河北省','北京市')
   优点,查询速率快,省磁盘,但是不能用于变化的数据列
    (3) 时间类型 
    datetime   
    timestamp

6.列属性的约束

not null 非空约束
unique key 唯一约束
primary key 主键约束非空且唯一,一张表只能有一个一般是 ID列,身份证列,学生证号。用于多个字段来定义唯一非空的列选此约束。

7.其他属性

auto_increment 自增长
default 默认值
comment 注释

8. SQL语句分类之DDL

主要作用于定义库表的属性。

8.1 对库的定义语言为增删改查

  1. 增 create databases nbclass charset utf8mb4;
  创库规范:
  字符集必须设置
  不要有大写字母 (开发容易不按规则创库)
  不要有数字开头
  库名需与业务有关,且不能太长
  库名不能是关键字
  2. 删 DROP database nbclass;只有root才有drop权限不要轻易使用。
  3. 改 alter database nbclass charset utf8;及时生效主要修改的是库的字符集,
  4. 查 show create database nbclass;

8.2 对表的定义 分为表属性和列属性

表属性:
1.存储引擎类型 innodb
2.字符集 &校对规则 /排序规则忽略大小写等
3.注释
列属性:
数据类型
约束
其他属性

  use nbclass;
  create table stumess(
  id INT NOT NULL PRIMARY KEY       AUTO_INCREMENT COMMENT '学号',
  sname VARCHAR(32) NOT NULL COMMENT '姓名',
  age TINYINT NOT NULL DEFAULT 18   COMMENT '年龄',
  sex ENUM('male','female','others') NOT NULL       DEFAULT 'others' COMMENT '性别',
  intime DATETIME NOT NULL DEFAULT NOW()       COMMENT '入学时间'
  )ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';
建表规范牢记
  1. 表名: 小写,业务相关,不能数字开头,不能太长,  不能是关键字.
  2. 表属性: 字符集,存储引擎,注释 
  3. 列属性: 
  合适的数据类型(简短,合适的,完整的) 
  必须要有PK(id 自增长数字列).
  每个列要非空,并设定默认值.
  必须要有注释.
  DROP TABLE xuesheng; 
  TRUNCATE TABLE xuesheng;
  二者区别在于 前包联表结构和表行内容删除所有物理删除 后truncate 只删除表的段区页
改 修改前DSEC STU 来查看表结构方便修改
  要求 在上表中**加入**一列数据手机号
  alter table stu ADD shouji bigint not null     comment '手机号'
  -- 在name列后添加dizhi列
  alter table stu ADD dizhi varchar(100) NOT null     comment '地址'  AFTER  sname;
  -- 在首列添加qq号列
  ALTER TABLE stu ADD qq BIGINT NOT NULL         UNIQUE COMMENT 'qq号' FIRST;
  -- 删除列
  ALTER TABLE stu DROP qq ;
  ALTER TABLE stu DROP shouji;
  alter table stu drop dizhi

修改表属性
alter table stu engine=innodb;
修改表名归档可用
alter table stu rename stumess;
-- 将sex列名改为gender,数据类型改为tinyint,加个注释(0代表nv,1代表男)
解第一步先 desc stu 查看表结构方便抄写未改动的列属性
alter table stu change sex gender tinyint not null default 1 comment '0nan,1nv'

查 show create table stumess;

9. SQL语句分类之DCL

主要用于
grant 授权
grant 权限 on 作用范围(库表)to 用户名@白名单 密码(identified by '123')
revoke 拿掉权限
revoke 权限 on 作用范围(库表)from 用户名@白名单

10. SQL语句分类之DML

DML 数据操作语言主要对表中数据行的操作

10.1 insert 数据插入行

多行录入录入数据前 desc +表名;查看表结构
inter into stumess(id,sname,age,gender,intime)
values(1,'zhangsan','18',1,11-11),(1,'lisi','18',1,11-12),..
简单写法,省略输入表结构默认按照原先表结构排列
inter into stumess
values(1,'zhangsan','18',1,11-11)
指定列输入:insert into stumess(id age);

10.2 delete 数据行删除

delete from stumess where id=5
注意:delete属于逻辑删除,磁盘空间不会立即释放大量使用delete会产生逻辑碎片。区别与truncate物理删除很快

10.3 update 数据修改

update stumess set age=28 where id=5
伪删除:用update实现伪删除将想要伪装的数据加一列 注释

11. SQL语句分类之DQL

最重要的sql查询语言

11.1 单独使用查询语言

  1. select &&datadir;
    show variables like '%trx%' 模糊查询关键字
  2. 简易计算 select 5*5
  3. 函数查询 select now()查询当前时间

11.2 配合多子句

11.2.1 from

是必须项
select name,popu from city; 从city表中取出某列

11.2.2 where
  可理解为判断条件
  select * from city where population<1000000; <>    为不等于意思
   where配合like语句使用
   查询国家代号是CH开头的城市信息.
  SELECT * FROM city 
  WHERE countrycode LIKE 'CH%';
  **注意:** LIKE 语句 百分号不要出现在查询条件  前,因为查询不走索引.
  -- where 配合逻辑连接符(and or)
  --- 1. 中国城市人口大于500w的城市
  SELECT * FROM city
  WHERE countrycode='CHN' AND       population>5000000 ;

  --- 2. 中国或者美国城市信息
  SELECT * FROM city
  WHERE countrycode='CHN' OR       countrycode='USA';

  -- where 配合 in 
  --- 中国或者美国城市信息
  SELECT * FROM city 
  WHERE countrycode IN ('CHN','USA');
  -- where 配合 between and
  --- 查询 人口数量在100w-200w之间的城市
  SELECT * FROM city
  WHERE population >= 1000000 AND population <= 2000000;

  SELECT * FROM city
  WHERE population BETWEEN 1000000 AND     2000000;
11.2.3 group by (分组) +聚合函数
  聚合函数 
  MAX()        最大值
  MIN()        最小值
  AVG()        平均值
  COUNT()      数量
  SUM()        求和
  GROUP_CONCAT() 列转行

说明,有group by子句,必然会有聚合函数
在业务查询中,需要对于表中数据按照数据特点进行分别统计是用group by 加 聚合函数实现。
重点 group by 执行原理: 先执行group by后面所按需求选择的列拿出来进行去重,排序。在返回到select后的条件进行函数计算,并将结果显示到屏幕。

  --- 1. 统计世界的所有人口总和
  SELECT  SUM(population) FROM city ;
  --- 2. 统计国家的总人口数量
  SELECT countrycode, SUM(population) FROM city
  GROUP BY countrycode ;
  --- 3. 统计中国每个省的总人口数
  SELECT countrycode,district , SUM(population) 
  FROM city 
  GROUP BY district;
  --- 5. 统计中国每个省的城市名列表.
  SELECT district,GROUP_CONCAT(NAME) 
  FROM city 
  WHERE countrycode='CHN' 
  GROUP BY district;

  --- 6. 关于 GROUP BY 的限制
  RROR 1055 (42000): Expression 
  -- #1 of SELECT list is not in GROUP BY clause     and contains nonaggregated 
  -- column 'world.city.CountryCode' which is not     functionally dependent 
  -- on columns in GROUP BY clause; this is       incompatible with sql_mode=only_full_group_by

  --- sql_mode=only_full_group_by
  1. 在 SELECT 后的条件,不在 GROUP BY 后
  2. 在 SELECT 后的条件,不在函数里包裹
  3. 如果select后列是唯一值时候,就不会报错
  5. GROUP BY 的条件列是主键或者唯一键时.

总结: sql_mode=only_full_group_by 为了防止出现结果集1对多的关系.

11.2.4 having
  后过滤 在....之后统计
  --- 统计中国每个省的总人口数,只显示总人口大    于500w
  SELECT district , SUM(population) 
  FROM city 
  WHERE countrycode='CHN'  
  GROUP BY district
  HAVING SUM(population)>5000000;
11.2.5 order by 对结果进行排序
  --- 查询中国所有的城市信息,并按照人口数排序    输出结果
  SELECT * FROM city  
  WHERE countrycode='CHN'
  ORDER BY population DESC ;
  --- 统计中国每个省的总人口数,只显示总人口大    于500w,并按照总人口降序输出
  SELECT district , SUM(population) 
  FROM city 
  WHERE countrycode='CHN'  
  GROUP BY district
  HAVING SUM(population)>5000000
  ORDER BY SUM(population) DESC ; 倒序
11.2.6 limit限制

取中国人口超100万的前五个省。
select distrit from city where countrycode='CHN' group by distrit having >1000000
order by populatiom limit 5;

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

推荐阅读更多精彩内容

  • db-engines.com:可以查询数据库软件使用排名 1.SQL介绍 SQL 指结构化查询语言 SQL 使我们...
    张福帅19阅读 982评论 0 3
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,439评论 0 13
  • 一. Java基础部分.................................................
    wy_sure阅读 3,784评论 0 11
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,108评论 0 9
  • 作业发型 上面无脸男孩女孩用中性笔画的,比较清楚,下面用彩色铅笔画的比较淡,一笔画成的比较难看!
    末末317阅读 240评论 1 1