数据库

一些最重要的 SQL 命令

  • select - 从数据库中提取数据
  • update - 更新数据库中的数据
  • delete - 从数据库中删除数据
  • insert into - 向数据库中插入新数据
  • create database - 创建新数据库
  • alter database - 修改数据库
  • create table - 创建新表
  • alter table - 变更(改变)数据库表
  • drop table - 删除表
  • create index - 创建索引(搜索键)
  • drop index - 删除索引

指定字段查找

select name,country from Websites;

有重复值的只先一个出来

select distinc country from Websites;

条件查找

select * from Websites where country='CN';

查找的字符

  • 文本字段 vs. 数值字段
    如果是文本就要单引号,如果是数值就不用单引号。
select * from Websites where id=1;

order by 关键字用于对结果集进行排序。

order by 关键字用于对结果集按照一个列或者多个列进行排序。

order by 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 desc 关键字。

select * from Websites order by alexa desc;
select * from Websites order by country,alexa;

SQL insert into 语句

insert into 语句用于向表中插入新记录。

  • SQL insert into 语法
    insert into 语句可以有两种编写形式。

1.第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

insert into table_name values (value1,value2,value3,...);

2.第二种形式需要指定列名及被插入的值:

insert into Websites (name, url, alexa, country)
values ('百度','https://www.baidu.com/','4','CN');

SQL update 语句

请注意 SQL update 语句中的 where 子句!
where 子句规定哪条记录或者哪些记录需要更新。如果您省略了 where 子句,所有的记录都将被更新!

update Websites set alexa='5000', country='USA' where name='菜鸟教程';

Update 警告!
在更新记录时要格外小心!在上面的实例中,如果我们省略了 where子句,如下所示:

update Websites set alexa='5000', country='USA'

执行以上代码会将 Websites 表中所有数据的 alexa 改为 5000,country 改为 USA。

执行没有 where子句的 update 要慎重,再慎重。

delete 语句

请注意 SQL delete 语句中的 where 子句!
where 子句规定哪条记录或者哪些记录需要删除。如果您省略了 where 子句,所有的记录都将被删除!

delete from Websites
where name='百度' AND country='CN';

SQL select top 子句

select top 子句用于规定要返回的记录的数目。

select top 子句对于拥有数千条记录的大型表来说,是非常有用的。

select * from Persons
where rownum <=5;

SQL like 操作符

like 操作符用于在 where 子句中搜索列中的指定模式。
下面的 SQL 语句选取 name 以字母 "G" 开始的所有客户:

select * from Websites
where name like 'G%';

提示:%符号用于在模式的前后定义通配符(默认字母)。

下面的 SQL 语句选取 name 以字母 "k" 结尾的所有客户:

select * from Websites
where name like '%k';

下面的 SQL 语句选取 name 包含模式 "oo" 的所有客户:

select * from Websites
where name like '%oo%';

通过使用 not 关键字,您可以选取不匹配模式的记录。

select * from Websites
where name not like '%oo%';

in 操作符

in 操作符允许您在 where 子句中规定多个值。
in 操作符实例
下面的 SQL 语句选取 name 为 "Google" 或 "菜鸟教程" 的所有网站:

select * from Websites
where name IN ('Google','菜鸟教程');

SQL between 操作符

between 操作符用于选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。

select * from Websites
where alexa between 1 and 20;

not between 操作符实例

如需显示不在上面实例范围内的网站,请使用 not between:

select * from Websites
where alexa not between 1 and 20;

带有 in 的 between 操作符实例
下面的 SQL 语句选取 alexa 介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站:

select * from Websites
where (alexa between 1 and 20)
and country not in ('USA', 'IND');

带有文本值的 between 操作符实例
下面的 SQL 语句选取 name 以介于 'A' 和 'H' 之间字母开始的所有网站:

select * from Websites
where name between 'A' and 'H';
select * from Websites
where name not between 'A' and 'H';

带有日期值的 between 操作符实例
下面的 SQL 语句选取 date 介于 '2016-05-10' 和 '2016-05-14' 之间的所有访问记录:

SELECT * FROM access_log
WHERE date BETWEEN '2016-05-10' AND '2016-05-14';

SQL 别名

通过使用 SQL,可以为表名称或列名称指定别名。

select name as n, country as c
from Websites;

在下面的 SQL 语句中,我们把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名:

select name, concat(url, ', ', alexa, ', ', country) as site_info
from Websites;

表的别名实例

下面的 SQL 语句选取 "菜鸟教程" 的所访问记录。我们使用 "Websites" 和 "access_log" 表,并分别为它们指定表别名 "w" 和 "a"(通过使用别名让 SQL 更简短):

select w.name, w.url, a.count, a.date 
from Websites as w, access_log as a 
where a.site_id=w.id and w.name="菜鸟教程";

别名应用情景:

  • 在查询中涉及超过一个表
  • 在查询中使用了函数
  • 列名称很长或者可读性差
  • 需要把两个列或者多个列结合在一起

SQL join

SQL join 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
最常见的 join 类型:SQL inner join(简单的 join)。 SQL inner join 从多个表中返回满足 join 条件的所有行。

select Websites.id, Websites.name, access_log.count, access_log.date
from Websites
inner join access_log
on Websites.id=access_log.site_id;

不同的 SQL JOIN

在我们继续讲解实例之前,我们先列出您可以使用的不同的 SQL JOIN 类型:

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行

SQL left join 实例

下面的 SQL 语句将返回左边的所有记录,即使没有右表的匹配,右表没法有匹配,就以NULL填充:
有的库是left join,有的库是left outer join。 如果是right join ,与其相同,左右交换

select Websites.name, access_log.count, access_log.date
from Websites
left join access_log
on Websites.id=access_log.site_id
order by access_log.count;

SQL full outer join 实例

MySQL中不支持 full outer join,你可以在 SQL Server 测试以下实例。

select Websites.name, access_log.count, access_log.date
from Websites
full outer join access_log
on Websites.id=access_log.site_id
order by access_log.count dese;

SQL UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
有多个同样的值,只取出一个。

select country from Websites
union
select country from apps
order by country;

有多个同样的值,如果希望都取出来,则用union all。

select country from Websites
union all
select country from apps
order by country;

带有 where的 SQL union all

下面的 SQL 语句使用 union all 从 "Websites" 和 "apps" 表中选取所有的中国(CN)的数据(也有重复的值):

select country, name from Websites
where country='CN'
union all
select country, app_name from apps
where country='CN'
order by country;

SQL select into实例

  • 创建 Websites 的备份复件:
select *
into WebsitesBackup2016
from Websites;
  • 只复制一些列插入到新表中:
select name, url
into WebsitesBackup2016
from Websites;
  • 只复制中国的网站插入到新表中:
select *
into WebsitesBackup2016
from Websites
where country='CN';
  • 复制多个表中的数据插入到新表中:
select Websites.name, access_log.count, access_log.date
into WebsitesBackup2016
from Websites
left join access_log
on Websites.id=access_log.site_id;

提示: select into 语句可用于通过另一种模式创建一个新的空表。只需要添加促使查询没有数据返回的 where 子句即可:

select *
into newtable
from table1
where 1=0;

SQL insert into select 语句

insert into select 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。

  • SQL insert into select 有两种作用
    我们可以从一个表中复制所有的列插入到另一个已存在的表中:
insert into table2
select * from table1;
  • 或者我们可以只复制希望的列插入到另一个已存在的表中:
insert into table2
(column_name(s))
select column_name(s)
from table1;

SQL insert into select 实例

  • 复制 "apps" 中的数据插入到 "Websites" 中:
insert into Websites (name, country)
select app_name, country from apps;

只复 QQ 的 APP 到 "Websites" 中:

insert into Websites (name, country)
select app_name, country from apps
where id=1;

SQL create database语句

create database 语句用于创建数据库。

  • SQL create database实例
create database my_db;

数据库表可以通过 create table 语句来添加。

SQL create table语句

create table语句用于创建数据库中的

表由行和列组成,每个表都必须有个表名。

提示:如需了解 MS Access、MySQL 和 SQL Server 中可用的数据类型,请访问我们完整的 数据类型参考手册


SQL create table 实例

现在我们想要创建一个名为 "Persons" 的表,包含五列:PersonID、LastName、FirstName、Address 和 City。

我们使用下面的 create table语句:

实例

create table Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
  • PersonID 列的数据类型是 int,包含整数。

  • LastName、FirstName、Address 和 City 列的数据类型是 varchar,包含字符,且这些字段的最大长度为 255 个字符。

提示:可使用 INSERT INTO 语句向空表写入数据。

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

推荐阅读更多精彩内容

  • 一、数据库的一些概念 数据库的概念: 数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与...
    __RY__阅读 674评论 0 1
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,722评论 0 2
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,320评论 0 9
  • 数据库优化 sql语句优化 索引优化 加缓存 读写分离 分区 分布式数据库(垂直切分) 水平切分 MyISAM和I...
    半瓶阳光o_o阅读 581评论 0 2
  • 2012初冬,余居杭州半月,访名胜,谒古迹,草就数篇,韵多不谐,然当时心情,溢于字间。经宋玉霞女士不吝指正,权且发...
    Jijingtao阅读 385评论 2 4