SQL基础(一)

SQL

SQL是关系数据库的查询语言.在SQL中最难的应该算是查询。本篇文章, 注重点在于总结基础的sql语句, 重点讲述查询语句。
下面提供了可以练习sql的数据库, 直接导入数据库运行即可.

管理数据库的SQL

连接登入

mysql -u用户名 -hIP地址 -p密码 -P端口号
假设我要连接到本地的Mysql服务器, 其端口号是3306, 用户名是root, 密码是123456。则应该写成入下语句
mysql -uroot -p123456 -h127.0.0.1 -P3306

修改密码

登入数据库中, 我们有时候会有修改密码的需求.
set password for用户名@主机名= password(密码)

  • 密码使用单引号括起来.
  • 用户名、主机名使用飘号括起来.

查看服务器中所有数据库

show databases;

查看服务器中所有数据库

切换数据库

切换到world数据库
use world;

切换数据库

查看数据库中的所有表

show tables;

查看数据库中的所有表

丢库

drop database world;
这种语句很少会用, 危险指数太高

丢表

drop table customer;

丢表

操作表的SQL

清空表中记录

delete from customer;

清空表中记录

注意: 一般delete from我们会配合where来匹配要删除的记录.如果不写,默认就是全部删除.相当于WHERE 1=1

查看表中的记录

select
    字段名列表
from
    表名 别名
WHERE 过滤条件
  • 过滤条件为true才显示出来.不写的话, 相当于WHERE 1 = 1

例如查看customer表,该表只有一条记录,执行如下sqlselect * from customer;

添加(插入数据)到表

INSERT INTO 表名
(
      字段名1,
      字段名2,
      字段名N
) VALUES (
      值1,
      值2,
      值N
)

为了和Oracle的添加语句兼容, 最好是一次插入一条.因为Oracle不支持mysql的批量添加数据的语法。

创建表

建表的语法和添加格式很像, 比较大的区别是其字段名后要说明数据类型。而且也没有VALUES后的子句。

create table tableName (
       字段名1 数据类型1,
       字段名2 数据类型2
);

更新数据

update 表名 
SET 字段名1 = 值1,
        字段名2 = 值2
WHERE 过滤条件;

联接查询

假设我们又如下两张表,一张城市表, 一张国家表.表结构如下

城市表

国家表

现在有一个需求, 需要我们查出每个国家首都的名字.在国家表中的Captial字段存的是城市表中城市的ID.这时候我们就需要用到联接查询.而SQL最早的时候给我们提供了两表联接的语法,又叫做逗号

笛卡尔积和逗号

笛卡尔积是一种数学预算

数学中,两个集合XY笛卡儿积(Cartesian product),又称直积,在集合论中表示为X × Y,是所有可能的有序对组成的集合,其中有序对的第一个对象是X的成员,第二个对象是Y的成员。

之所以要介绍笛卡尔积的定义是因为做表联接的逗号本质上就是做笛卡尔积,更具笛卡尔积的定义, 即组合两个集合所有的有序对的运算.对于两张表A、B来说, 笛卡尔积运算就是, 依次取A中的记录和B中的记录组合, 这样就能得到所有的有序对, 因为我们首先保证了A的顺序,然后又保证了B的顺序, 不会出现重复的对。

需求
现在有一个需求, 需要我们查出每个国家首都的名字.在国家表中的Captial字段存的是城市表中城市的ID

讲了那么多在看下面的sql代码应该能够理解,由于逗号联接本质是做笛卡尔积,结果太大.所以一般我们会加条件语句进行过滤

SELECT co.`Name` '国家', ci.`Name` '首都'
FROM 
    Country co, City ci
WHERE co.Capital = ci.ID
-- 这句sql意思局势拿表Coutry和City做联接(笛卡尔积),并做等值条件判断,取出满足条件的集合
两表联接查询结果

内联接

为什么有内联接

内联接的概念其实就是逗号联接, 本质就是做笛卡尔积运算.但是由于教早的SQL语句, 没有把联接语句普通条件过滤语句(WHERE)区分开来, 导致写的sql并不是那么容易阅读, 因为我们看到WHERE字句的时候,还要判断 这是在做普通的条件过滤,还是在做联接.于是就有内连接语法,专门为了链接而诞生。

语法

select *
from
A 
inner join 
B
on 条件 

如上述语法,我们可以将上述需求的sql写成内联接语法。如下

SELECT 
co.`Name` '国家', 
ci.`Name` '首都'
FROM 
    Country co
inner join
    City ci
on
    co.Capital = ci.ID

外联接

  • 外联接存在的问题是,如果数据中匹配的字段.如有的Country的Capital字段值为NULL(不是'null'字符串).NULL参与的预算结果都为false, 则会导致有的国家信息被丢弃。
  • 但是现实中, 我们遇到业务需求很可能是要打印出表中国家的首都, 就算没有这个国家首都的数据,我们也要打印出这个国家.

外联接就是用来解决上述提到的问题,外联接可以保存指定一边的表格数据.外联接又分为 左联接右联接,但是往往我们习惯用 左联接,因为对于 右联接我们只需要把表格对调也能实现.

左联接

保存左表联接表的数据

语法
select 
字段列表(逗号分隔)
from 
    表A
left [outer] join
    表B
on
    条件

--- outer可以省略不写

需求
现在有一个需求, 需要我们查出每个国家首都的名字.在国家表中的Captial字段存的是城市表中城市的ID.对于Capital字段为NULL的首都也要保留其数据


SELECT 
co.`Name` '国家', 
ci.`Name` '首都'
FROM 
    Country co
left outer join
    City ci
on
    co.Capital = ci.ID

如下图,左外联接, 计算国家的首都字段为NULL为输出.一共是239条记录,比内联接多了7条

左外联接

右联接

将左联接的A、B表对调即为右联接.

SQL字句的运算顺序

虚表

所谓的虚表,就是实际在数据库并不存在的表.但是其表示形式和数据库的实际表一样.
如下sql语句 select * from Country;
查询出的结果表即称为虚表

顺序

先FROM加载对应的基表--> WHERE字句过滤数据-->SELECT 确定字段 --> 生成虚表 --> ORDER BY排序

其他

给表取别名

  • 位置: 我们可以给表取别名, 在FROM语句后.
  • 注意: 一旦给表取别名, 真名就不能用.因为FROM字句是最新加载的, 所以我们给表取别名后, sql语句中的真表名就不能用了,但数据库中的表名没变。

给字段取别名

  • 位置: 在SELECT 语句

select name as '国家' from Country
select name '国家' from Country
两句等效,表示给name取别名,叫国家.

  • 注意: SELECT字句是在FROM和WHERE字句后加载, 所以其别名不能用在上述两个字句中.SELECT字句加载后虚表也就确定了数据.所以ORDER BY是可以使用 字段别名

WHERE等价于ON

where等价于on,但是一般不这样写.on一般只配合join才规范

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

推荐阅读更多精彩内容