整体架构

数据类型

  • 文本类:CHAR、VARCHAR(可变长度字符,多使用)、TEXT、LONGTEXT(文本较大时使用)
  • 数字类:TINYINT、INT、BIGINT、FLOAT、DOUBLE
  • 日期类:DATE、DATETIME(常用)、TIME、YEAR

保留字

  • SELECT:选择列
  • WHERE:过滤行
  • AS:起别名
  • HAVING:过滤分组
  • GROUP BY:分组说明
  • ORDER BY:排序顺序

常用操作

  • 查看当前有哪些DB:show databases;
  • 添加DB:create database gc;
  • 删除DB:drop database gc;
  • 进入DB:use gc;
  • 创建数据表:create table gc(...);
  • 增加列:alter talbe account add c1 int
  • 查看表:show tables;
  • 显示表内容:select * from table;

 

案例

  • 供应商表:Vendors
  • 商品表:Products
  • 顾客表:Customers
  • 订单表:Orders
  • 订单物品表:OrderItems

  

 

检索数据

  • 检索一列

    • SELECT col1,col2 FROM table;
  • 检索所有列
    • SELECT * FROM table;
  • 检索一列(显示不同值)
    • SELECT DISTINCT col FROM table;
  • 检索一列(显示前3行)
    • SELECT col FROM table LIMIT 3;

排序

  • 对选定的列以字母顺序排序

    • SELECT col FROM table ORDER BY col

过滤

  • 检索两个列,返回特定值的行

    • SELECT col1, col2 FROM table WHERE col = 1;
  • 检索两个列,返回不等于特定值的行
    • SELECT col1, col2 FROM table WHERE col <> 1;
  • 检索两个列,返回特定范围值的行
    • SELECT col1, col2 FROM table WHERE col BETWEEN 5 AND 10;

函数

  • 使用函数

    • UPPER():将字符串转为大写
    • LTRIM():去掉字符串左边空格
    • LENGTH():返回字符串的长度
  • 聚集函数
    • ABS(col):返回某列数的绝对值
    • AVG(col):返回某列的平均值
    • COUNT(col):返回某列有值的行的个数
    • MAX(col)/MIN(col):返回某列最大/最小值
    • SUM(col):返回某列值之和

分组

  • 使用BROUP BY子句,指示DBMS按某字段排序并分组数据
  • 返回供应商1001提供的产品数目
    • SELECT COUNT(*) AS num_prods FROM Products
    • WHERE vend_id = '1001';
  • 统计所有供应商的产品数目
    • SELECT vend_id, COUNT(*) AS num_prods FROM Products
    • GROUP BY vend_id;
  • 统计所有产品数目>2的供应商
    • SELECT vend_id, COUNT(*) AS num_prods FROM Products
    • GROUP BY vend_id HAVING mum_prods > 2;

   

子查询

  • 列出订购物品FB的所有顾客

    • SELECT cust_id FROM Orders WHERE order_num IN
    • (SELECT order_num FROM OrderItems WHERE prod_id = 'FB');   
    • 思路:先到订单物品表中找出包含FB的所有订单号,然后再到订单表中找出是谁下的单,返回用户id
  • 显示Customers表中每个顾客的订单总数
    • SELECT cust_name, cust_state, (SELECT COUNT(*) FROM Orders
    • WHERE Orders.cust_id = Customers.cust_id) AS orders
    • FROM Customers ORDER BY Cust_name;
    • 思路:从Customers表中检索顾客列表,对于检索出的每个顾客,统计其在Orders表中的订单数目
    • 原理:在子查询中,对于Orders表中cust_id等于Customers表中cust_id的行,统计其行数,并将该列命名为orders返回

  ...

联结表

  • 联结的三种形式

    • 内联结(inner join):联结具有相同字段的另一个表,可基于两个表之间的等值条件做过滤
    • 自联结(self join):同一个表联结自己的副本,用于表内信息筛选,比子查询效率高
    • 外联结(outer join):联结具有相同字段的另一个表,可基于两个表之间的等值条件做过滤,返回包括在相关表中没有关联行的行
  • 联结的原理
    • 关系数据库数据表的设计原则是相同的数据不出现多次,这样可以保证较强的可伸缩性(scale,即适应不断增加的数据量)
    • 故数据常存储在多个表中,这时就需要使用联结机制将结果输出
    • 联结两个表时,会将第一个表中的每一行与第二个表中的每一行配对,即返回笛卡尔积,而不管逻辑上是否匹配
    • 加上WHERE作为过滤条件,会删除不符合逻辑的行,只返回包含匹配给定条件(联结条件)的行
  • 例1(内连接):返回包含vend_name、prod_name、prod_price的新表(即把产品表中的vend_id换成vend_name,看起来更加直观)
    • SELECT vend_name, prod_name, prod_price
    • FROM Vendors, Products
    • WHERE Vendors.vend_id = Products.vend_id;
    • 或:
    • SELECT vend_name, prod_name, prod_price
    • FROM Vendors INNER JOIN Products
    • ON Vendors.vend_id = Products.vend_id;

  

  • 例2(自联结):找出和Y Sam在同一个公司的所有顾客,并返回相关信息(显示某一cust_name下的所有cust_contact)

    • SELECT c1.cust_id, c1.cust_name, c1.cust_contact
    • FROM Customers AS c1, Customers As c2
    • WHERE c1.cust_name = c2.cust_name
    • AND c2.cust_name = 'Y Sam';

  • 例3(外联结):对每个顾客下的订单进行统计,包括未下单的顾客(返回cust_id和order_num两列,)

    • select customers.cust_id,orders.order_num
    • from customers left outer join orders
    • on customers.cust_id = orders.cust_id;

 

  • 例4(带内联函数的联结):检索所有顾客及每个顾客下的订单数

    • select customers.cust_id , count(orders.order_num) as num_ord
    • from customers inner join orders on customers.cust_id = orders.cust_id
    • group by customers.cust_id;
    • 其中,count(orders.order_num) 实现了对每个顾客的订单计数

组合查询

  • 利用UNION,将多个SELECT语句组成一个结果集
  • UNION中的每个查询必须包含相同的列、表达式或聚集函数
  • UNION从查询结果中自动去除了重复的行(不去重就用UNION ALL)

插入数据

  • INSERT
  • 插入所有行
    • INSERT INTO Customers VALUES(
    • '1000006', 'TONY', ... , NULL) ;
  • 插入部分行
    • INSERT INTO Customers (cust_id,cust_name)
    • VALUES('1000006', 'TONY');
  • 插入索引出的数据
    • INSERT INTO Customers (cust_id,cust_name,...)
    • SELECT cust_id,cust_name,... FROM CustNew;
  • 从一个表复制到另一个表(创建新表CustCopy,将Customers内容复制进去)
    • SELECT TABLE CustCopy AS SELECT * FROM Customers;

更新删除

  • UPDATE:更新表中的行
  • 例:将 cust_id = 1000005 行的邮箱信息更新为 kim@thetoystore.com
    • UPDATE Customers SET cust_email = 'kim@thetoystore.com'
    • WHERE cust_id = '1000005';
    • 注:SET后可设置多个字段的值,不加WHERE将更新素有行
  • DELETE:删除某行
  • 例:将 cust_id = 1000006 行删除
    • DELETE FROM Customers
    • WHERE cust_id = '1000006';
    • 注:不加WHERE将删除所有行

创建表

  • CREATE:创建新表

    • CREATE TABLE Products(
    • prod_id CHAR(10) NOT NULL,
    • vend_id CHAR(10) NOT NULL,
    • prod_name CHAR(254) NOT NULL,
    • );
  • ALERT:更新表
    • 增加一列
    • ALERT TABLE Vendors
    • ADD vend_phone CHAR(20);
  • DROP:删除表
    • DROP TABLE CustCopy;

工具

  • MySQL-Front:一款数据库管理工具

参考

Hive和Mysql的区别

https://blog.csdn.net/qq_39597203/article/details/89481867?

https://blog.csdn.net/qq_28652401/article/details/83509636?

partition

https://www.cnblogs.com/tfiremeteor/p/6296599.html

https://www.cnblogs.com/SmileIven/p/9133548.html

开窗函数

https://www.cnblogs.com/lihaoyang/p/6756956.html

SQL50题

https://www.cnblogs.com/imsoft/p/10182126.html

[DB] SQL 必知必会的更多相关文章

  1. 读书笔记--SQL必知必会--建立练习环境

    书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...

  2. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  3. 读书笔记--SQL必知必会12--联结表

    12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...

  4. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  5. 《SQL必知必会》学习笔记(一)

    这两天看了<SQL必知必会>第四版这本书,并照着书上做了不少实验,也对以前的概念有得新的认识,也发现以前自己有得地方理解错了.我采用的数据库是SQL Server2012.数据库中有一张比 ...

  6. SQL 必知必会

    本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...

  7. 0005 《SQL必知必会》笔记01-SELECT语句

    1.SELECT基本语句: SELECT 字段名1,···,字段名n FROM 表名 2.检索所有字段,用"*"替换字段名,这会导致效率低下 SELECT * FROM 表名; 3 ...

  8. 你必知必会的SQL面试题

    写在前面的话 本文参考原博<走向面试之数据库基础:一.你必知必会的SQL语句练习-Part 1>和<走向面试之数据库基础:一.你必知必会的SQL语句练习-Part 2>进行练习 ...

  9. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  10. 图灵程序设计丛书(SQL必知必会)笔记

    SQL必知必会 第二课:检索数据 1.分页 (1).SQL Server 栗子 : select top 2 columns from tableName (2).Oracle 栗子 :select ...

随机推荐

  1. C++ 虚函数的内部实现

    C++ 虚函数的内部实现 虚函数看起来是个玄之又玄的东西,但其实特别简单!了解了虚函数的内部实现,关于虚函数的各种问题都不在话下啦! 1. 知识储备 阅读这篇文章,你需要事先了解以下几个概念: 什么是 ...

  2. abp加DDD开发:低耦合、可复用、可扩展的【工单】业务模块-简介和集成

    前言 很多场景[单体+模块化]比微服务更合适,开发难度低.代码可复用性强.可扩展性强.模块化开发有些难点,模块启动与卸载.模块之间的依赖和通讯.asp.net core abp为我们提供了模块化开发能 ...

  3. [源码解析] 并行分布式任务队列 Celery 之 Task是什么

    [源码解析] 并行分布式任务队列 Celery 之 Task是什么 目录 [源码解析] 并行分布式任务队列 Celery 之 Task是什么 0x00 摘要 0x01 思考出发点 0x02 示例代码 ...

  4. IDEA如何在一个项目空间下管理多个项目?

    用过Eclipse和IDEA编程工具都知道,Eclipse创建新项目时都是在同一项目空间下,而IDEA一个项目空间只能有一个项目,创建项目时会创建.idea文件. 所以每次创建完项目或者打开另一个项目 ...

  5. JavaScript 简写技巧

    1. 声明变量 //普通写法 let x; let y = 20; //简写 let x, y = 20; 2. 给多个变量赋值 //普通写法 let a, b, c; a = 5; b = 8; c ...

  6. 模拟退火算法Python编程(3)整数规划问题

    1.整数规划问题 整数规划问题在工业.经济.国防.医疗等各行各业应用十分广泛,是指规划中的变量(全部或部分)限制为整数,属于离散优化问题(Discrete Optimization). 线性规划问题的 ...

  7. 光猫和路由器都支持ipv6,却无法使用ipv6?

    这些年很多地方的光猫都能获得ipv6地址了,而且新出的路由基本都支持ipv6,但是还是有很多人在http://test-ipv6.com看不到自己的ipv6地址,也上不了ipv6网站. 我也遇到这个问 ...

  8. 分享几个网址二维码生成api

    分享几个网址二维码生成api 传入网址参数,或许二维码图片,扫二维码能直接跳转网址 http://b.bshare.cn/barCode?site=weixin&url=https://www ...

  9. Laravel 定时任务 任务调度 可手动执行

    1.创建一个命令 php artisan make:command TestCommand 执行成功后会提示: Console command created successfully. 生成了一个新 ...

  10. 【手打】coredns单台使用

    目录: coredns介绍 coredns安装 corendns配置 coredns介绍 CoreDNS 其实就是一个 DNS 服务,而 DNS 作为一种常见的服务发现手段,所以很多开源项目以及工程师 ...