MOSH10小时学会sql笔记大全(数据分析零基础学习笔记—2.1_sql)

目录

The SELECT Statement

The SELECT Clause

WHERE clause

BETWEEN AND

THE LINK OPERATOR

The REGEXP Operator-正则表达式

[  ]的用法

-表示范围

^-beginning

$-end,|表示Logical or

THE IS NULL Operator

THE OEDER BY Clause

THE TLMIT Clause

INNER JOINS

JOINNING ACROSS DATABASES

SELF JOIN

JOIN Multiply tables

COMPOUND JOIN CONDITIONS-复合主键 

IMPLICT JOIN SYNTAX-隐式联合语法

OUTER JOINS

Outer JOINS BETWEEN MULTIPLE TABLES

SELF OUTER JOINS

THE USING CLAUSE

NATURAL JOINS

CROSS JOINS

显性

隐形

UNIOS

COLUMN ATTRIBUTE

INSETING MULTIPLE ROWS

INSETING HIERARCHIAL ROWS

CREATING A COPY OF A TABLE

UPDATING A SINGLE ROW

UPDATING MUTIPLE ROW

USING Subqueries in Updates

DELETING ROWS

RESTORING ROWS

AGGREGATE FUNCTIONS聚合函数

THE GROUP BY CLAUSE

THE HAVING CLAUSE

THE ROLLUP OPERATOR分类汇总

使用ROLLUP,groupby不能用别名,要用真名列明

CHAPTER6  WRITTING COMPLEX QUERIES

subquries子查询

THE IN OPERATOR

SUBQUERIES VS JOINS

THE ALL KEYWORD

all和max可以互相替换使用

THE ANY KEYWORD

CORRELATED SUBQUERIES相关子查询

THE EXISTS Operator-高效平替IN

SUBQUERIES IN THE SELECT CLAUSE/SELECT语句中的子查询

SUBQUERIES in the FROM Clause FROM子句中的子查询

Numeric Functions数值函数

四舍五入round

截断函数truncate

向上取整ceiling

向下取整floor

绝对值ABS

随机函数rand获取一个0-1之间的数字

String Functions字符串函数

DATE FUNCTIO日期函数

FORMTTING DATES AND TIME格式化日期和时间

计算时间和日期

THE INFULL AND COALESCE FUNCTIONS

THE IF FUNCTION

THE CASE OPERATOR

CREATING VIEWS

Altering or dropping view更改或删除视图

UPDATABLE VIEWS 可更新视图

THE WITH OPTION CHECH CLAUSE

OTHER BENEFITS OF VIEWS

CHAPTER 9 STORED PROCEDURES存储过程

CREATING A STORED PROCEDURE创建存储过程

CREATING PROCEDURES USING MYSQLWORKBENCH

DROPPING PROCEDURES

PARAMETERS

PARAMETER WITH DEFAULT VALUES

PARAMETER VALIDATION参数验证

OUTPUT PARAMETER 

VARIABLES

FUNCTIONS

OTHER CONVENTIONS

CHAPTER 10 TRIGGERS触发器

查看/删除触发器

USING TRIGGERS FOR AUDITING使用触发器进行审计

EVENTS事件

VIEWING AND DROPPONG EVENTS查看删除和更改事件

CHAPTER 11 TRANSACTIONS事务

CRATING TRANSACTION

CONCURRENCY AND LOCKING并发和锁定

CONCURRENCY PROBLEMS并发问题

TRANSACTION ISOLATION LEVELS事务隔离级别

READ UNCOMMITED ISOLATION LEVEL读未提交隔离级别

READ COMMITED ISOLATION LEVEL读已提交隔离级别

REAPATABLE READ ISOLATION LEVEL可重复读隔离级别

无论提交与否,session1都查不到新加入的行,必须把session1的commit才能查到session1新插入的内容。

SERIALIZABLE ISOLATION LEVEL序列化隔离级别

DEADLOCKS死锁

CHAPTER12 DATA TYPE

STRING字符串

INTEGER整数类型

 FIXED-PINT AND FLAOTING-POINT TYPES定点和浮点类型

BOOLEAN TYPE布尔型

ENUM AND SET TYPE枚举和集合型-不好用

DATE AND TIME TYPE日期和事件类型

BLOB TYPE二进制长对象

JSON TYPE

CHAPTER 13设计数据库

DATE MODELLING数据建模

CONCEPTUAL概念模型

logic逻辑模型

physical models

NORMALIZATION标准化

Forward engineerring a model一个模型的正向工程

数据库同步模型

创建和删除数据库

创建表

修改表

创建关系

更改主键/外键

字符集排序规则

存储引擎

INDEXING FOR HIGH PERFORM

创建索引

查看索引

前缀索引

全文索引

复合索引COMPOSITE INDEX

复合索引中的排序ORDER OF COMPOSITE INDEX

当索引无效时

使用索引排序

覆盖索引COVRING INDEXS

维护索引

CHAPTER 15 保护数据库

Creating a User创建一个用户

查看用户

删除用户

修改密码

授予权限

查看权限

撤销权限


SQL

表中的任何列都可以作为主键,只要它满足以下条件:

 任意两行都不具有相同的主键值;

 每一行都必须具有一个主键值(主键列不允许空值 NULL);

 主键列中的值不允许修改或更新;

 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。

The SELECT Statement

USE sql_store;

SELECT * FROM customers

WHERE customer_id = 1

order by first_name

The SELECT Clause

SELECT  

first_name,

    last_name,

    points,

    (points+10)*100 AS 新的列名称

from customers

SELECT  * -选中所有列

use sql_store;

SELECT  

name,

    unit_price,

    unit_price*1.1 AS new_price

FROM products;

WHERE clause

use sql_store;

SELECT  *

FROM customers

where birth_date>'1990-01-01'

SELECT  *

FROM order_items

where order_id=6 and unit_price*quantity>30

SELECT  *

FROM customers

where state IN ('VA' ,'GA','FL')

==============

SELECT  *

FROM customers

where state='VA' OR state='GA' OR state='FL’

BETWEEN AND

SELECT * 

FROM customers

WHERE birth_date between '1990-01-01' AND '2000-01-01'

THE LINK OPERATOR

%表示任意字符不限制数量

SELECT * 

FROM customers

WHERE last_name LIKE '%y'

_表示一个任意字符

SELECT * 

FROM customers

WHERE last_name LIKE '_____y'

SELECT * 

FROM customers

where address like "%trail%"or

  address like "%avenue%" and

      phone like "%9"

The REGEXP Operator-正则表达式

[  ]的用法

USE sql_store;

SELECT * 

FROM customers

WHERE last_name REGEXP '[gim]e'

代表搜出来lastname里包含ge ie me的词语

-表示范围

USE sql_store;

SELECT * 

FROM customers

WHERE last_name REGEXP '[a-h]e'

^-beginning

USE sql_store;

SELECT * 

FROM customers

WHERE last_name REGEXP '^field|mac|rose'

代表搜出来是开头为field 或者开头是mac或开头是rose的词语

$-end,|表示Logical or

USE sql_store;

SELECT * 

FROM customers

WHERE last_name REGEXP 'field$|mac|rose'

THE IS NULL Operator

SELECT * FROM sql_store.customers

where phone is null

THE OEDER BY Clause

默认用primary key排序,用order可以使用其他列排序,DESC是倒序

SELECT * 

FROM customers

ORDER by First_name DESC

SELECT ,quantity*unit_price as total_price

FROM sql_store.order_items

where order_id=2

order by total_price desc

THE TLMIT Clause

LIMIT 偏移量,步长

SELECT * 

FROM customers

limit 6,3

SELECT * 

FROM customers

order by points desc

limit 3

INNER JOINS

SELECT order_id,o.customer_id,first_name,last_name

FROM orders o---加空格可以省略AS

JOIN customers c

ON o.customer_id=c.customer_id

JOINNING ACROSS DATABASES

use sql_inventory;

SELECT *

FROM sql_store.order_items o

JOIN products p

on o.product_id=p.product_id

要为不属于这个database的数据库加上sql_databasename

SELF JOIN

use sql_hr;

select e.employee_id,e.first_name,m.first_name AS manager

from employees e

JOIN employees m

ON e.reports_to= m.employee_id

JOIN Multiply tables

USE sql_invoicing;

select p.payment_id,c.client_id,p.invoice_id,p.date,p.payment_method,p.amount,pm.name as method_name

FROM clients c

JOIN payments p

on c.client_id=p.client_id

JOIN payment_methods pm

ON p.payment_method=pm.payment_method_id

COMPOUND JOIN CONDITIONS-复合主键 

USE sql_store;

select *

FROM order_items oi

JOIN order_item_notes oin

    ON oi.order_id=oin.order_id

    and oi.product_id=oin.product_id

IMPLICT JOIN SYNTAX-隐式联合语法

select *

FROM orders o

JOIN customers c

    ON o.customer_id= c.customer_id

  ==implicit join syntax

select *

from orders o,customers c

where o.customer_id= c.customer_id

OUTER JOINS

SELECT 

c.customer_id,

    c.first_name,

    o.order_id

FROM customers c

LEFT JOIN orders o

 ON c.customer_id = o.customer_id

 ORDER BY c.customer_id

LEFT 会让 左面的表customers全量显示,无论是否满足布尔运算的条件

LEFT 会让 右面的表orders全量显示,无论是否满足布尔运算的条件

SELECT 

c.customer_id,

    c.first_name,

    o.order_id

FROM customers c

RIGHT JOIN orders o

 ON c.customer_id = o.customer_id

 ORDER BY c.customer_id

Outer JOINS BETWEEN MULTIPLE TABLES

USE sql_store;

SELECT o.order_date,o.order_id,c.first_name,sh.name as shipper,os.name as status

FROM orders o

JOIN customers c

ON c.customer_id = o.customer_id

LEFT JOIN shippers sh

ON o.shipper_id=sh.shipper_id

JOIN order_statuses os

ON o.status=os.order_status_id

ORDER BY o.order_id

多个表左连接查询,应该将所查主表放在最左边,而且后面的表都应该和它作为连接条件

SELF OUTER JOINS

USE sql_hr;

select 

e.employee_id,

    e.first_name,

    m.first_name manager

FROM employees e

LEFT JOIN employees m

ON e.reports_to=m.employee_id

THE USING CLAUSE

use sql_store;

select 

o.order_id,

    c.first_name

FROM orders o

JOIN customers c

 ON o.customer_id = c.customer_id

==========

use sql_store;

select 

o.order_id,

    c.first_name,

    sh.name AS shipper

FROM orders o

JOIN customers c

    USING (customer_id)

LEFT JOIN shippers sh

USING (shipper_id)

__________________________________________________________________________

组合主键

select*

FROM order_items oi

JOIN order_item_notes oin

ON oi.order_id=oin.order_id AND 

       oi.product_id=oin.product_id

============================

select*

FROM order_items oi

JOIN order_item_notes oin

USING(order_id, product_id)

NATURAL JOINS

不需要指定列,系统自动判断连接2个table

USE sql_store;

select customer_id,order_id

FROM orders o

natural join customers c

CROSS JOINS

把select的两列做笛卡尔积

显性

USE sql_store;

select c.first_name as customer,

p.name as product

FROM customers c

CROSS JOIN products p

ORDER BY c.first_name

隐形

USE sql_store;

select c.first_name as customer,

p.name as product

FROM customers c,products p

ORDER BY c.first_name

UNIOS

USE sql_store;

select order_id,

   order_date,

       'ACTIVE' as status

FROM orders o

where order_date>='2019-01-01'

UNION

select order_id,

   order_date,

       'ARCHIVED' as status

FROM orders o

where order_date < '2019-01-01'

USE sql_store;

SELECT first_name

FROM customers

UNION

SELECT name

FROM shippers

COLUMN ATTRIBUTE

INSERT INTO customers(

first_name,

last_name,

birth_date,

address,

city,

state

)

values(

'John',

'Smith',

'1999-12-25',

'ADDRESS',

'CITY',

'CA'

)

INSETING MULTIPLE ROWS

INSETING HIERARCHIAL ROWS

INSERT INTO orders (customer_id,order_date,status)

values(1,'2019-01-01',2);

select last_insert_id()

INSERT INTO orders (customer_id,order_date,status)

values(1,'2019-01-01',2);

INSERT INTO order_items

values(last_insert_id(),1,1,2.64),

(last_insert_id(),2,5,4.65);

CREATING A COPY OF A TABLE

INSERT INTO order_archieved

SELECT * 

from ORDERS

WHERE order_date<'2019-01-01'

USE sql_invoicing;

CREATE TABLE invoices_archieved

SELECT name as client,

i.client_id,

invoice_id,

    number,

    invoice_total,

    payment_total,

    due_date,

    payment_date

FROM invoices i

JOIN clients c

USING (client_id)

WHERE payment_date is not null

UPDATING A SINGLE ROW

UPDATE invoices

SET payment_total=invoice_total*0.5,

payment_date=due_date

WHERE invoice_id=3

UPDATING MUTIPLE ROW

在默认情况,MYSql工作台在安全模式下运行,它仅允许更新一条记录。可以进入edit的perference取消safe updates

UPDATE invoices

SET payment_total=invoice_total*0.5,

payment_date=due_date

WHERE client_id IN (3,4)

USING Subqueries in Updates

USE sql_invoicing;

UPDATE invoices

SET 

payment_total=invoice_total*0.5,

payment_date=due_date

WHERE client_id IN(

SELECT client_id

FROM clients

where state in ('CA','NY'))

UPDATE orders

SET comments='gold customer'

where customer_id in

(

    select customer_id

    from customers 

    where points>3000)

DELETING ROWS

DELETE FROM invoices

where client_id=(

select cl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值