[SQL]小白入门SQL

本文概述了SQL的基础知识,包括结构化查询语言介绍、关系型数据库操作、SELECT查询的深入解析、条件查询、数据过滤与排序、JOINs应用、数据库范式及索引管理,还涵盖了统计计算、表达式使用、视图创建、触发器和SQL执行顺序。适合初学者和进阶者提升数据库技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021/5/30

Lesson 0 SQL简介

I SQL

SQL,Structured Query Language,结构化查询语言
数据库,Relational database,关系型数据库,存储大量数据的一种软件。
SQL用于操作数据库里的数据,进行数据查询、数据更新、写入数据,
客户端软件-数据库查询语句-数据库返回查询结果

II 关系型数据库

表->(行,列)行-无限不固定 列-有限固定

Lesson 1 SELECT查询

SELECT col, col找什么
FROM table 从哪儿找
WHERE col条件是什么
条件可以是 数字、文本
SELECT查询(quires)
SELECT col FROM table WHERE condition
*代表所有列
(1)SELECT * FROM talbe拉所有数据

Lesson 2 条件查询

SELECT col
FROM table
WHERE contition
AND/OR another_condition
AND/OR …
组合多个条件
(1)数字结果
=,!= < > <= >=, BETWEEN 1 AND 15, IN(2,4,6),NOT IN(2,4,6)
(2)字符
= ,!=,LIKE(模糊查询),%(通配符)IN(2,4,6),NOT IN(2,4,6)
col_name LIKE “%AT%”
字符串需要包含“string”

Lesson 4: 查询结果Filtering过滤 和 sorting排序

(1)DISTINCT关键字指定某个或某些属性列唯一返回
DISTINCT会直接删除重复的行
GROUP BY除了返回唯一的行,还可以对具有相同的属性值的行做一些统计计算

SELECT DISTINCT col1,col2,…,
FROM table
WHERE conditions
(2)结果排序
ORFER BY col_name让结果按1个或多个属性列做排序
SELECT col1,col2,…,
FROM table
WHERE conditions
ORDER BY col1 ASC/DESC(升序或降序)
数字-按数字升降序
文本-按字母序
(3)LIMIT
LIMIT,OFFSET + ORDER BY
LIMIT规定只返回多少行结果
OFFSET指定从哪一行返回

SELECT col1,col2,…,
FROM table
WHERE conditions
ORDER BY col1 ASC/DESC
LIMIT num_limit OFFSET num_offset

Lesson 6: 用JOINs进行多表联合查询

I 数据库范式

Normalization 数据库范式-数据库设计的规范,表和表之间可以独立增长。
JOIN可以进行多表联合查询
主键-Primary key 唯一标识一条数据 e.g 自增ID auto-incrementing integer
借助主键,可以吧两个表中具有相同主键ID的数据连接起来

II 连接模式

(1)INNER JOIN
SELECT col1,col2,…,
FROM table(主表)
INNER JOIN table2(要连接的表)
ON table.id = table2.id
WHERE conditions
INNER JOIN将两个表数据连接到一起,ON条件描述关联关系;
两个表中如果通过ID互相找不到的数据将会舍弃
(2)OUTER JOIN
INNER JOIN只会保留两个表都存在的数据
LEFT JOIN,RIGHT JOIN,FULL JOIN都能保留不能匹配的行
SELECT col1,col2,…,
FROM table1
LEFT/RIGHT/FULL JOIN table2
ON table1.id = table2.id2
WHERE conditions
区别:
A 连接 B
LEFT JOIN-保留A的所有行,不管有没有匹配上B
RIGHT JOIN-保留B的所有行
FULL JOIN-保留A和B的所有行
细节:不存在的数据 用NULL填充
因此需要单独处理NULL-WHERE Building_name IS NOT NULL
3-NULL的处理
一个尽量减少NULL的使用,让数据中尽可能少出现NULL的情况
WHERE column IS/IS NOT NULL 选择某字段是否等于NULL

Lesson 9: 在查询中使用表达式

在SQL中可以使用col_name的地方都可以用表达式来对属性进行一定的计算或处理
e.g
SELECT speed / 2.0 (对结果除2)
FROM table
WHERE conditions

每一种数据库都有自己的一套函数,包括常用的数字、字符串、时间等的处理
AS关键字 用来给表达式起别名
e.g.
SELECT column AS better_column_name, …
FROM a_long_widgets_table_name AS mywidgets
Lesson 10 在查询中进行统计
SQL默认支持一组统计表达式,可以完成数据的统计,如计数、求平均等
(1)常用统计函数:
在这里插入图片描述(2)分组统计
GROUP BY可以按某个col对数据进行分组
e.g.
GROUP BY Year按年份分组 相同年份分到同一个组里
如果把统计函数与GROUP BY结合,则统计结果就是对分组内的数据进行统计
(3)HAVING
HAVING可以对分组之后的数据再做SELECT筛选
SELECT col1,col2,…,FUNC(col)
FROM table
WHERE condition
GROUP BY col
HAVING group_condition
HAVING作用的结果集为分组内数据

Lesson 12: 查询执行顺序

一个完整的SELECT查询:
SELECT DISTINCT column, AGG_FUNC(column_or_expression), …
FROM mytable
JOIN another_table
ON mytable.column = another_table.column
WHERE constraint_expression
GROUP BY column
HAVING constraint_expression
ORDER BY column ASC/DESC
LIMIT count OFFSET COUNT;

一个查询SQL的执行总是先从数据里按条件选出结果,然后对这些数据再次做一些整理处理,按要求返回结果,让结果尽可能简单直接。
查询顺序:
1-FROM 和JOINs
是第一个执行的,如果JOIN不同的表会生成一个临时Table来用于下面的过程。
2-WHERE
确定了数据来源WHERE语句就将在这个数据源中按要求进行数据筛选 并丢弃不符合要求的数据行
3-GROUP BY
4-HAVING
5-SELECT
6-DISTINCT
7-ORDER BY
8-LIMIT/OFFSET

完成:
Lesson 1: SELECT 查询 101
Lesson 2: 条件查询 (constraints) (Pt. 1)
Lesson 3: 条件查询(constraints) (Pt. 2)
Lesson 4: 查询结果Filtering过滤 和 sorting排序
Lesson 5 Review: 复习 SELECT 查询
Lesson 6: 内连接(INNER JOINs)
Lesson 7: 外连接(OUTER JOINs)

exercise:
1.创建表格
create table actor(
actor_id,smallint(5) primary key,
first_name,varchar(45) not null,
last_name,varchar(45) not null,
last_update,date,not null
);
2.插入新的信息
insert into actor(
actor_id,
first_name,
last_name,
last_update
)
values(1,‘xxx’,‘xx’,'x),
(2,‘xxx’,‘xx’,‘x’);
mysql中三种插入数据的语句:
insert into :插入数据 如果出现重复会报错
replace into:插入并替换数据 要求表中有Primary key或者unique索引;如果数据库已经存在数据则用新数据替换;如果没有则效果和insert into一样
insert ignore表示 如果表中已存在相同的记录,则忽略当前数据

example:
drop table if exists actor;
CREATE TABLE actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update datetime NOT NULL);
insert into actor values (‘1’, ‘PENELOPE’, ‘GUINESS’, ‘2006-02-15 12:34:33’), (‘2’, ‘NICK’, ‘WAHLBERG’, ‘2006-02-15 12:34:33’);
3.mysql创建表
1-常规创建
create table if not exists
2-复制表格
create table2 like table1
3-将table1的一部分拿来创建table2
create table if not exists table2_name{
first_name varchar(45) not null,
last_name varchar(45) not null,
}
select first_name,last_name
from table1

4.mysql 如何为字段添加索引
1-添加主键
alter table tbl-name add primary key (col_list)
要求:该索引必须是唯一的且不能为null
2-添加唯一索引
alter table tbl_name add unique index_name(col_list)
要求:创建索引的值必须是唯一的
3-添加普通索引
alter table tbl_name add index index_name(col_list)
添加普通索引,索引值可出现多次
4-添加全文索引
alter table tbl_name add fulltext infex_name(col_list);
5-删除索引
drop index index_name on tbl_name

或者:
alter table tbl_name drop index index_name;
或者:
alter table tbl_name drop primary key;

5.mysql创建视图
create view view_name
as
select xx as a ,xxx as b
from table1
6.强制索引查询 force index
指定本次查询强制使用哪个索引
7.增加列
alter table tbl_name add (col_name type default)
8.mysql创建触发器
触发器:非显示调用,而是在发生 往表中插入、删除、更新记录时被自动激活
用来实现对表实施复杂的完整性约束
create trigger trigger_name
trigger_time trigger_event
on tbl_name
for each row
triggr_stmt
trigger_time:触发时间 BEFORE 或 AFTER
trigger_event:触发事件 INSERT或UPDATE或DELETE
9.基本的数值更新
update tbl_name set col_name = new_name
where col_name = target_value

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值