第三章 - SQL基础及元数据获取

SQL的介绍

SQL的定义:结构化查询语句
SQL的作用:对库和表进行操作

SQL的常用分类

  • DDL 数据定义语言(Data Definition Language)
  • DCL 数据控制语言(Data Control Language)
  • DML 数据操作语言(Data Manipulation Language )
  • DQL 数据查询语言(Data Query Language)

表的核心属性介绍

列的属性

数据类型

## 数值类型
  - tinyint  极小整数数据类型(0-255)
  - INT      常规大小的整数数据类型

## 字符类型
  - CHAR      固定长度字符串、最多为255个字符
  - VARCHAR   可变长度字符串、最多为65535个字符
  - ENUM      有一个固定的合法值组成的枚举(相当组成个选项列表)

- 时间类型
  - DATETIME    范围从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999。
  - TIMESTAMP   范围从 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。
                注意:TIMESAMP会受到时区的影响
## 二进制类型
   一般不使用(MYSQL不适合存储图片,视频等)
   neo4J 专门用来做图片视频的存储

约束((一般建表时添加))

primary key  #主键约束
设置为主键的列,此列的值必须非空且唯一,主键在一个表中只能有一个,但是可以有多个列一起构成。

not null     #非空约束
列值不能为空,也是表设计的规范,尽可能将所有的列设置为非空。可以设置默认值为0

unique key   #唯一键
列值不能重复

其他属性

unsigned   #无符号
针对数字列,非负数。

key   #索引
可以在某列上建立索引,来优化查询,一般是根据需要后添加

default #默认值
列中,没有录入值时,会自动使用default的值填充

auto_increment  #自增长
针对数字列,顺序的自动填充数据(默认是从1开始,将来可以设定起始点和偏移量)
comment #注释

表的属性

存储引擎

默认存储引擎:INNoDB

字符集

GBK       //一个中文字符占用2个字节
UTF8      //一个中文字符占用3个字节
utf8mb4   //一个中文字符占用4个字节长度  

UTF8与UTF8MB4区别:
UTF8MB4支持emoji  支持音标

校对规则(collation)

校对规则是跟着字符集走的.
例如: utf8mb4
utf8mb4_general_ci     --> 通用的校对,默认值,大小写不区分(默认规则)
utf8mb4_bin           --> 大小写区分

-- 查看字符集校对规则
show collation;

-- 修改字符集校对规则
alter database world charset utf8mb4 collate utf8mb4_bin;

SQL基础操作-DDL

库的定义

建库

create database school;
create schema sch;
CREATE DATABASE test CHARSET utf8;
create database xyz charset utf8mb4 collate utf8mb4_bin;
--
建库规范:
    库名使用小写
    库名不能是数字开头
    库名要和业务有关
    建库时要添加字符集
-- 

删库

drop database test;

改库

alter database test charset utf8mb4;

查库

show databases;     //查看所有库
show create database test;  //查看单个库

表定义

建表

-- 建表格式:
create table  表名(
列名1  数据类型  约束  其他属性,
列名2  数据类型  约束  其他属性,
列名n  数据类型  约束  其他属性,
)engine=innodb charset=utf8mb4;

USE school;
CREATE TABLE stu(
id      INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
sname   VARCHAR(255) NOT NULL COMMENT '姓名',
sage    TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
sgender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
sfz     CHAR(18) NOT NULL UNIQUE  COMMENT '身份证',
intime  TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
) ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';

 #DEFAULT NOW()  当前时间的意思
 #ENGINE 指定使用的表结构

建表规范:
1.表名小写,无数字开头,与业务有关
2.必须要有主键,一般是一个自增长的无关列
3.选择合适的数据类型,字符长度要适中
4.每个列都非空,并设置默认值
5.每个列必须要有注释
6.必须设置存储引擎和字符集

删表

-- 表定义和数据全部删除
drop table stu;

-- 清空表的区,数据清空,表定义保留
truncate table stu; 

改表

-- 在表中插入一列(默认最后列)
ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL UNIQUE COMMENT 'qq号';  //在stu表中添加qq列

-- 在指定列后插入一列--AFTER
ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT '微信号' AFTER sname; //在sname后添加wechat列(after)

-- 在第一列前插入一列-- FIRST
ALTER TABLE stu ADD num INT NOT NULL COMMENT '数字' FIRST;

-- 删除列
ALTER TABLE stu DROP wechat;

-- 修改列的数据类型的属性 -- MODIFY
ALTER TABLE stu MODIFY sname VARCHAR(128) NOT NULL;

-- 修改列名称(数据类型需要指定) -- CHANGE
ALTER TABLE stu CHANGE sgender sg CHAR(1) NOT NULL DEFAULT 'n' ;

查表

-- 查看表结构
desc xs;

-- 查看单张表
show create table xs;

-- 查看当前库中所有表
show tables;

复制表结构

CREATE TABLE ceshi LIKE stu;  //将stu表结构复制到ceshi

SQL基础操作-DCL

权限回收

-- revoke 权限 on 范围  from 用户;
revoke delete on zhihu.* from [email protected]'10.0.0.%';

用户授权

-- grant 权限     no 对象   to 用户
grant all on *.* to [email protected]'10.0.0.%' identified by '123456';
grant all on *.* to [email protected]'10.0.0.%' identified by '123456' with grant option;
//with grant option:超级管理员才具备的,给别的用户授权的功能

SQL基础操作-DML

插入表数据 -- INSERT

USE school //进入指定库

-- 插入一条数据-最简单写法
INSERT INTO student VALUES(1,'oldguo','22654481',18);

-- 插入一条数据(标准) //推荐
INSERT INTO student(sno,sname,sage,ssex)
VALUES (2,'zhang3',18,'m');

-- 插入多条数据 //推荐
INSERT INTO student(sno,sname,sage,ssex)
VALUES
(3,'zhang4',18,'m'),
(4,'li4',18,'m'),
(5,'wang5',19,'f');

-- 针对性录入数据
INSERT INTO student(sname,sage,ssex)
VALUES ('zhang3',18,'m');

修改表数据 - UPDATE

-- 语法格式

UPDATE 表名 SET 列名='值'  where 列名='值' AND 列名='值'  //UPDATE一定要加where条件,多个条件加AND

-- 将student表中名字li4为zhang1
update student set sname='zhang1' where sno=3;

-- 将1号学员的1001课程分数修改为89
update sc  set score=89 where sno=1 and cno=1001;

删除表数据 -- DELETE

-- 删除1号学员的所有成绩信息(sno为1)
delete from sc_bak where sno=1; 

使用update代替delete -- 伪删除

1.额外添加一个状态列
alter table student add status enum(1,0) default 1;

2.使用update
update student set status='0' where sid=1;

3.应用查询存在的数据(业务语句查询语句进行调整)
select * from student where status=1;

SQL基础应用 - DQL

SELECT 语句应用

SELECT (单表)的执行逻辑

select 列1,列2
from
where
group
having
order by
limit

SELECT 单独使用的情况(MySQL独家)

-- SELEECT @@参数
SELECT @@datadir;
SELECT @@port;
SELECT @@socket;
SELECT @@innodb_flush_log_at_trx_commit;
SHOW VARIABLES LIKE 'innodb%';

-- select 函数()
SELECT NOW();
SELECT DATABASE();
SELECT USER();
SELECT 12*12;
SELECT CONCAT('HELLO  WORD');
SELECT CONCAT(USER,'@',HOST) FROM mysql.user;
SELECT GROUP_CONCAT(USER,'@',HOST) FROM mysql.user;

FROM 子句应用

以下操作使用world库,world说明

SELECT * FROM city;    //查看city的所有信息
SELECT NAME,countrycode FROM city;    //查看city的name和countrtcode列

where 子句应用

-- 等值查询
SELECT * FROM city WHERE CountryCode='CHN';     //查询中国所有城市的信息

-- 不等值查询 (>,<,<=,>=,<>)
SELECT * FROM city WHERE Population<100;        //查询人口数据小于100人的城市
SELECT * FROM city WHERE countrycode!='CHN';    //查询不是中国的城市(尽量不要使用,可能不走索引)
SELECT * FROM city WHERE countrycode<>'CHN';    //查询不是中国的城市(尽量不要使用,可能不走索引)

-- 模糊查询
SELECT * FROM city WHERE CountryCode LIKE 'CH%';    //查询国家代号为CH开头的城市信息

-- 逻辑连接符(and,or)
SELECT * FROM city WHERE countrycode='CHN' AND Population>5000000;    //查询中国城市人口超过500W的城市信息
SELECT * FROM city WHERE district='shandong' OR District='hebei';     //查看山东省或河北的城市信息

-- 配合between and 使用
SELECT * FROM city WHERE Population BETWEEN 1000000 AND 2000000;    //查询人口数在100W-200W区间的城市信息(包含头尾,)

-- 配合 in 使用
SELECT * FROM city WHERE district IN ('shandong','hebei');    //查询山东省或河北的城市信息

-- 配合 not in 使用
SELECT * FROM city WHERE countrycode NOT IN ('CHN','USA');    //查询不是中国或美国的城市信息

group by + 常用聚合函数

作用

根据 by后面的条件进行分组,方便统计,by后面跟一个列或多个列

常用的聚合函数

COUNT()  -- 计数
AVG()    -- 平均值
SUM()    -- 求和
MIN()    -- 最小值
MAX()    -- 最大值
group_concat()  -- 列转行

举个例子

-- 统计每个国家的城市个数
SELECT countrycode,COUNT(id) FROM city
GROUP BY countrycode;

-- 统计每个国家的总人口数
SELECT countrycode,SUM(Population) FROM city
GROUP BY countrycode;

-- 统计各个国家的城市名列表
SELECT countrycode ,GROUP_CONCAT(NAME)
FROM city
GROUP BY countrycode

having 子句使用

-- 统计中国,每个省的,城市个数,省总人口数
--  只显示人口总数大于800w的省
SELECT District,COUNT(NAME),SUM(Population) FROM city
WHERE countrycode='CHN'
GROUP BY District
HAVING SUM(Population)>8000000;

order by 子句

原文地址:https://www.cnblogs.com/lpcsf/p/12076141.html

时间: 2024-10-10 00:19:25

第三章 - SQL基础及元数据获取的相关文章

Java Web 学习笔记 第三章 java基础(二)

第三章 java基础(二) 一.转义符 转义字符是"\",通过转义字符,可表示一些特殊的字符. 例如: '\n'  表示回车 '\t'   表示 制表符字符,一个制表符表示向右跳8-10个字符 '\\'   表示\ '\''   表示单引号 '\"'  表示双引号 "\u4e2d"表示unicode编码对应的字符(汉字:中). 二.布尔类型的概念和用法 boolean 类型用来表示肯定或否定两种可能. boolean 常用在分支语句.循环语句中. true

Oracle PL/SQL程序设计 第五版 上册 第三章 语言基础

最近看了很多东西,也练习了一些,我发现这东西好像有点进入瓶颈的感觉,这个瓶颈,我觉得是因为时间太短, 练习的还不够多,并且有很多东西都是随意带过弄的.并且最近在学习Python,有些东西还有点混淆了,我决定从新 来一遍这本书,把每一个例子都进行一个学习. PL/SQL块有匿名的,也有命名的,其实命名就是那些过程.函数.包.触发器.对象类型这些.书中第一个例子是这样的. insert.sql CREATE OR REPLACE PROCEDURE get_happy(emp_id_in IN NU

第三章 Linux基础知识

3.1 程序的组成与执行过程 3.1.1 三种编程接口 在前面几章我们已经粗略的说过,面向计算机通常有三种编程接口,分别是: a) 硬件规格 b) 系统调用 c) 库调用 每个CPU的生产厂商在生产一个计算芯片时,这个芯片本身有其内置的指令集,所以有一部分人在编程时直接面向这些指令集进行,这类编程方式就是面向硬件规格编程. 3.1.2 程序执行过程 前面我们说过,Intel x86系列的CPU,通常由外而内,指令集是分布在4个环上的,环0上的是特权指令,只能由操作系统执行,环3上的是普通指令,可

Struts2框架学习第三章——Struts2基础

本章要点 —  Struts 1框架的基本知识 — 使用Struts 1框架开发Web应用 —  WebWork框架的基本知识 — 使用WebWork框架开发Web应用 — 在Eclipse中整合Tomcat — 使用Eclipse开发Web应用 — 为Web应用增加Struts 2支持 —  Struts 2框架的MVC组件 —  Struts 2框架的流程 — 通过web.xml文件加载Struts 2框架 — 通过struts.properties文件配置Struts 2属性 —  str

第三章SQL编程

本章目标: 1.使用变量 2.输出语句 3.数据类型转换 4.逻辑控制语句 5.批处理 一.变量 1.什么是变量呢? 变量是存储数据的容器 T-SQL中的变量分为局部变量和全局变量 2.局部变量 局部变量的名称必须以标记@作为前缀 声明局部变量的语句如下: declare @variable name(局部变量名称) DataType(数据类型) 局部变量赋值有两种方法:使用Set语句或Select语句 整型: 1 2 3 declare @num int set @num=1 print 'n

Oracle第三章——SQL语言

SQL语言是高级的结构化查询语言,大大减轻了用户的负担.目前查询语言分为四种,数据定义语言(DDL).数据操纵语言(DML). 事务控制语言(TCL).数据控制语言(DCL). 一.数据定义语言(DDL) 1.CREATE CREATE命令用于创建模式对象,如创建表的格式为:CREATE TABLE [schema.]table (column datatype [, column datatype]);,其中, schema是对象的持有者,即用户对应的模式,如果在用户自己的模式中创建则可以不指

第三章 python基础

花了一个星期多看了 <learn python the hard way>,只能说掌握了皮毛的皮毛,今天开始学习看<core python programming>. 同样,也分享自己的学习笔记,督促自己,激励自己. 3.1 语句和语法Python 语句中有一些基本规则和特殊字符:?? 井号(#)表示之后的字符为 Python 注释?? 换行 (\n) 是标准的行分隔符(通常一个语句一行)?? 反斜线 ( \ ) 继续上一行?? 冒号 ( : ) 将代码块的头和体分开?? 语句(代

第三章 nodejs基础知识(上)

本章主要介绍一些nodejs的基础知识: 1. 什么是nodejs中的控制台,如何向控制台进行标准输出流与标准错误输出流的输出: 2. 什么是nodejs中的全局作用域,在nodejs中预先提供了哪些全局函数以及全局变量: 3. 什么是nodejs中的事件处理机制以及事件环进制,如何在nodejs中为各种事件指定事件触发以及事件取消时执行的回调函数: 4. 如何使用nodejs 中的调试器进行应用程序的调试: 3.1 nodejs中的控制台 在nodejs中,使用console对象代表控制台.在

【Linux系列】【基础版】第三章 Shell基础知识

3. Shell基础知识     3.1 Shell的由来         3.1.1 Bourne Agin Shell         3.1.2 其他的shell, 有 zsh, ksh等     3.2 查看有没有shell         3.2.1 yum list | grep zsh         3.2.2 ls /root/.bash_history         3.2.3 echo $HISTSIZE -> vi /etc/profile 修改HISTSIZE的值 -