sql

sql-基础
sql-基础查询-1
sql-基础查询-2
sql-更新

概览

image.png
  1. 数据库(Database,DB):将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。

2 .数据库管理系统(Batabase Management System,DBMS):用来管理数据库的计算机系统。

  1. 关系型数据库(Relational Database,RDB):目前应用最广泛的数据库。

  2. 结构化查询语言(Structured Query Language,SQL):专门用于操作 RDB。

  3. 常见的 5 种关系型数据库管理系统(Relational Database Management System,RDBMS):
    ①Oracle Database:甲骨文公司 ②SQL Server:微软公司 ③DB2:IBM 公司 ④PostgreSQL:开源⑤MySQL:开源

SQL语句种类:

(1)DDL(Data Definition Language,数据定义语言):创建、删除或修改数据库以及数据库中的表等对象。
①CREATE:创建数据库和表等对象
②DROP:删除数据库和表等对象
③ALTER:修改数据库和表等对象

(2)DML(Data Manipulation Language,数据操作语言):查询或修改表中的记录。DML 使用最频繁。
①SELECT:查询表中的数据
②INSERT:向表中插入数据
③UPDATE:修改表中的数据
④DELETE:删除表中的数据

(3)DCL(Data Control Language,数据控制语言):确认或取消对数据库中的数据变更的执行操作,以及对用户的操作数据库中的对象权限进行设定。
①COMMIT:确认对数据库中的数据进行的变更
②ROLLBACK:取消对数据库中的数据进行的变更
③GRANT:赋予用户的操作权限
④REVOKE:取消用户的操作权限

SQL 语句书写规范:

①以分号结尾;
②大小写不敏感,不区分关键字的大小写,建议关键字大写;插入到表中的数据是区分大小写的,如“HI”、“Hi”和“hi”都不同。
③建议“关键字大写,表名小写和列名的首字母大写,多个单词用下划线分隔”的格式。
④单词使用半角空格或换行符隔开
⑤字符串、日期用单引号括起来('),如'Hello','2016-09-24';数字直接书写,不用加单引号,如5。

基本注意项

  1. 命名规则:

①只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称;
②规范要求命名以半角英文字符开头;
③名称不能重复。

  1. 数据类型的指定:声明该列的数据类型,是一种约束。

  2. 数据类型介绍:
    ①INTEGER:整型,意味不能存储小数;
    ②CHAR:字符串型,如 CHAR(10)和 CHAR(100)中的括号表名该列可以存储的字符串的最大长度。它是“定长字符串”,如 CHAR(8) 表示在列中插入 'abc' 时会自动保存成 'abc '(后面5个半角空格)的形式;
    ③VARCHAR:字符串型,类似 CHAR,不同的是它是 “可变长字符串”,如 VARCHAR(8) 在插入 'abc',保存的就是字符串 'abc';
    ④DATE:日期类型;

  3. 约束:
    ①非空约束:NULL 是空白(无记录)的意思的关键字,NOT NULL 表示必须输入的约束。
    ②主键约束:主键是可以确定一行数据的列,一般通过它取特定行的数据,它是唯一的,不允许重复。
    NOT NULL
    UNIQUE,每个表可以有多个 UNIQUE 约束,但是每个表至多有一个 PRIMARY KEY 约束。
    PRIMARY KEY
    FOREIGN KEY
    CHECK
    DEFAULT

数据库操作

  • show databases;展示所有数据库
  • create database dbName新建数据库
  • drop database dbName删除数据库
  • use dbName切换数据库

表操作

  • 建表
-- 语法:
-- CREATE TABLE <表名>
-- (
--        <列名1> <数据类型> <约束>,
--        <列名1> <数据类型> <约束>,
--        ...
--        <表约束1>,
--        <表约束2>,
--        ...
-- )
-- 创建名为 Shohin 的表
CREATE TABLE Shohin
(
    shohin_id     CHAR(4)      NOT NULL,
    shohin_mei    VARCHAR(100) NOT NULL,
    shohin_bunrui VARCHAR(32)  NOT NULL,
    hanbai_tanka  INTEGER ,
    shiire_tanka  INTEGER ,
    torokubi      DATE ,
    PRIMARY KEY (shohin_id)
 );
  • 删除表
-- 语法:DROP TABLE <表名>
-- 删除名为 Shohin 的表,被删的表,无法恢复。
DROP TABLE Shohin; 
  • 修改表
-- 语法:ALTER TABLE <表名> ADD <列名> <类型>;
-- 在 Shohin 中添加名为 Shohin_mei_Kana 类型为 VARCHAR(100) 的列
ALTER TABLE Shohin ADD Shohin_mei_Kana VARCHAR(100);
-- 语法:ALTER TABLE <表名> DROP COLUMN <列名>;
-- 删除 Shohin 表中名为 Shohin_mei_Kana 的列
ALTER TABLE Shohin DROP COLUMN Shohin_mei_Kana; 
  • 展示所有表
    show tables;
  • 展示表结构
    describe tableName;

基础查询

image.png
  • like(%表示0或多个任意字符,_表示单个任意字符)和in模式
  • AND 运算优先于 OR 运算,想要优先执行 OR 运算时可以使用括号


    image.png

    where:对行进行条件筛选
    group by:按组聚合(聚合键或聚合列)
    having:对聚合进行条件筛选
    order by:排序,默认升序

  • 【书写顺序】SELECT --> FROM --> WHERE --> GROUP BY --> HAVING
  • 【执行顺序】FROM --> WHERE --> GROUP BY --> SELECT-->ORDER BY
  • 回顾之前说的执行顺序,SELECT 子句是在 GROUP BY 子句之后执行。所以执行到 GROUP BY 子句时无法识别别名
  • 只有 SELECT 子句和 HAVING 子句以及ORDER BY子句中能够使用聚合函数。
  • 除了 COUNT 函数,其它函数不能将星号作为参数。COUNT 函数的结果根据参数的不同而不同。COUNT(*) 会得到包含 NULL 的数据行数,而 COUNT(<列名>) 会得到 NULL 之外的数据行数。select count(1);
  • WHERE 子句的执行速度比 HAVING 快。WHERE 子句指定行所对应的条件,HAVING 子句指定组所对应的条件

高级查询

  • union
    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名,默认会去重,不去重请使用union all
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
  • join
    有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join
//不使用join
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 
//使用join,效果一样
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

JOIN:同inner join,在两个表中都有匹配才返回该行,否则不返回该行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行

更新

image.png
  • select columnName...into new_table [in anther_db] from old_table
  • 如果要删除表全部数据时请使用 TRUNCATE <表名>,它比 DELETE 子句更高效。
  • 格式
    select columnName1 columnName2... from tableName where...
    insert into tableName (columnName...) values(value...)
    delete from tableName where...
    update tableName set columnName1=value1,columnName2=value2 where...
  • 多个字段更新,逗号隔开
--示例
UPDATE dbo.Shohin
    SET hanbai_tanka = hanbai_tanka * 10,    --逗号分割
        shiire_tanka = shiire_tanka / 2
WHERE shohin_bunrui = '厨房用具'

一些SQL语句

select top 100 * from tb_name ,选择前100行数据

select * from tb_name where c1 like '%U%' ,查询c1字段包含U的行,通配符--%替代0个或多个字符,_替代一个字符

select * from tb_name where c1 in ('hello',‘hi’) ,查询c1字段是hello或者是hi的行

select * from tb_name where c1 between 1 and 20 ,查询c1字段在1和20之间的列(not between不在此范围内)

select c1 as newname from tb_name,创建别名,一般是为了让列的可读性更强

select * from tb_name as newname ,表的创建别名法。在下面的情况下,使用别名很有用:在查询中涉及超过一个表,在查询中使用了函数,列名称很长或者可读性差,需要把两个列或者多个列结合在一起

快速理解

from指定了数据来源,可能是一张表,可能是多张表join后的结果,是一个行集
where对这些行集进行条件筛选,得到的让然是行集
group by根据聚合键对行集进行分组,得到组集
having对组集进行条件筛选
select选择哪些列,或聚合函数
order by进行排序

索引

可以在表中创建索引,以便更加快速高效地查询数据。用户无法看到索引,它们只能被用来加速搜索/查询。更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引

CREATE INDEX index_name
ON table_name (column_name)

视图

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

存储过程

存储过程
mysql存储过程
Transact-SQL中的存储过程,非常类似Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。SQL语句执行需要编译,优化,存储过程store procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。

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

推荐阅读更多精彩内容

  • 概览 Spark SQL是运行在Spark Core之上,用来处理结构化和半结构化数据的一个组件。Spark SQ...
    hipeer阅读 180评论 0 0
  • 教程来自google文档:https://cloud.google.com/sql/docs/mysql/conn...
    sky_memory阅读 3,836评论 0 2
  • 今天,的这样一篇文章,刚好是在四五月份财年年底,对于很多人在写年终总结的时候,我觉得是非常非常有必要的。 因为今天...
    兔小峥阅读 410评论 0 1
  • 明天期末考 寻思今晚早点睡 可就刚刚 全校男女生都到阳台上兴奋的大叫 整个校园都沸腾了 不用猜 我就知道下雪了! ...
    纯真阅读 203评论 0 1
  • 婆婆家养了一只狗,听婆婆讲是小叔子路上捡的,这只无人认领的狗跟着小叔子跑了好长一段路,把小叔子内心那座冰山给跑...
    毅哥妈阅读 194评论 0 1