数据库相关用法

use RUNOOB; 命令用于选择数据库。

show tables;展示数据库

set names utf8; 命令用于设置使用的字符集。

1 SELECT TOP 子句用于规定要返回的记录的数目:

sql server

SELECT TOP number|percent column_name(s)/* FROM table_name

SELECT TOP 2 * FROM Persons:从上面的 "Persons" 表中选取头两条记录

SELECT TOP 50 PERCENT * FROM Persons:从上面的 "Persons" 表中选取 50% 的记录

mysql:

SELECT column_name(s) FROM table_name LIMIT number;

oracle:

SELECT column_name(s)

FROM table_name

WHERE ROWNUM <= number

2 列名拼接

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

SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info

FROM Websites;

3 UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集(不重复)

UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型

4 UNION ALL:来选取重复的值

SELECT country, name FROM Websites

WHERE country='CN'

UNION ALL

SELECT country, app_name FROM apps

WHERE country='CN'

ORDER BY country;

5  SELECT INTO 语句:您可以从一个表复制信息到另一个表(自动生成新表),不复制表结构

可以复制所有的列插入到新表中

SELECT *

INTO newtable

FROM table1

where 条件;

只复制希望的列插入到新表中:

SELECT column_name(s)

INTO newtable

FROM table1;

复制多个表中的数据插入到新表中:

SELECT Websites.name, access_log.count, access_log.date

INTO WebsitesBackup2016

FROM Websites

LEFT JOIN access_log

ON Websites.id=access_log.site_id;

拷贝表结构及数据:

CREATE TABLE  table_name(新表)

AS

SELECT * FROM 旧表

6 INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中(已存在的表),不复制表结构

我们可以从一个表中复制所有的列插入到另一个已存在的表中:

INSERT INTO table2

SELECT * FROM table1;

或者我们可以只复制希望的列插入到另一个已存在的表中:

INSERT INTO table2

(column_name1,column_name2,..)

SELECT column_name(s)

FROM table1;

总结:

select into from 和 insert into select 都是用来复制表

两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建;insert into select from 要求目标表存在。

7 创建数据库:CREATE DATABASE dbname;删除数据库: DROP DATABASE database_name

8 创建表:

CREATE TABLE 语法:

CREATE TABLE table_name

(

column_name1 data_type(size),

column_name2 data_type(size),

column_name3 data_type(size),

....

);

column_name 参数规定表中列的名称。

data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。

size 参数规定表中列的最大长度。

删除表

DROP TABLE table_name:删除表,包括表结构包括表数据

TRUNCATE TABLE table_name:需要删除表内的数据,但并不删除表本身

9 CREATE INDEX 语句用于在表中创建索引:作用以便更加快速高效地查询数据

在表上创建一个简单的索引。允许使用重复的值:

CREATE INDEX index_name

ON table_name (column_name)

如果您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:

CREATE INDEX index_name

ON Persons (column_name1, column_name2)

CREATE UNIQUE INDEX 语法:在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值

CREATE UNIQUE INDEX index_name

ON table_name (column_name)

删除索引:DROP INDEX index_name/DROP INDEX index_name ON table_name

alter table table_name drop index index_name

10 SQL 约束(Constraint)

约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)

CREATE TABLE table_name

(

column_name1 data_type(size) constraint_name(索引名称),

column_name2 data_type(size) constraint_name,

column_name3 data_type(size) constraint_name,

....

);

NOT NULL - 指示某列不能存储 NULL 值。--------->null空值约束,ALTER TABLE Persons MODIFY Age int NOT NULL;ALTER TABLE Persons MODIFY Age int NULL;

SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL:查询地址是空的数据

SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NOT NULL:查询地址不是空的数据

UNIQUE - 保证某列的每行必须有唯一的值。

PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)

CHECK - 保证列中的值符合指定的条件。

DEFAULT - 规定没有给列赋值时的默认值。

My SQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons

(

    P_Id int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255) DEFAULT 'Sandnes'

)

修改约束:

ALTER TABLE Persons

MODIFY Age int NULL;

添加约束:

ALTER TABLE Persons

ADD UNIQUE (P_Id)

MySQL:数据库添加约束

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

UNIQUE (P_Id)------1

)

SQL Server / Oracle / MS Access:

CREATE TABLE Persons

(

P_Id int NOT NULL UNIQUE,------------2

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

如需命名UNIQUE 约束,并定义多个列的UNIQUE 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)--------------并定义多个列的UNIQUE 约束

)

===>

ALTER TABLE Persons

ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

alter table table_name drop constraint constraint_name/primary key/check/unique/default/foreign key/not null

drop database daatbase_name;用于删除数据库

drop table tablename:删除表内的数据,也删除表本身

TRUNCATE TABLE table_name;仅需要删除表内的数据,但并不删除表本身

ALTER TABLE 语句用于在已有的表中添加、删除或修改列:add(添加)/modify(修改)/drop(删除)/alter(修改)

如需在表中添加列,请使用下面的语法:

ALTER TABLE table_name

ADD  column_name datatype,

modify/alter column column_name datatype,

alter table table_name

drop column(必要字段) column_name:删除列

Auto-increment 会在新记录插入表中时生成一个唯一的数字,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1

要让 AUTO_INCREMENT 序列以其他的值起始,请使用下面的 SQL 语法:

ALTER TABLE Persons AUTO_INCREMENT=100,默认值从100开始

视图是基于SQL语句的结果集的可视化的表:视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。

SQL CREATE VIEW 语法:

CREATE VIEW view_name AS

SELECT column_name(s)

FROM table_name

WHERE condition

select * from view_name:查询视图

删除视图:DROP VIEW view_name

SQL 函数:聚合函数

AVG() - 返回数值列平均值:SELECT AVG(column_name) FROM table_name

SELECT site_id, count FROM access_log WHERE count > (SELECT AVG(count) FROM access_log);子嵌套查询

COUNT() - 返回函数返回指定列的值的行数

COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):SELECT COUNT(column_name) FROM table_name;SELECT COUNT(*) FROM table_name:统计所有数量

COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:SELECT COUNT(DISTINCT column_name) FROM table_name;

FIRST() - 返回列第一个记录的值:SELECT FIRST(column_name) FROM table_name;

LAST() - 返回列最后一个记录的值

MAX() - 返回指定列最大值

MIN() - 返回指定列最小值

SUM() - 返回数值列总和

标注函数( Scalar)

UCASE() - 将某个字段转换为大写

LCASE() - 将某个字段转换为小写

MID() - 从某个文本字段提取字符,MySql 中使用

SubString(字段,1,end) - 从某个文本字段提取字符

LEN() - 返回某个文本字段的长度

ROUND() - 对某个数值字段进行指定小数位数的四舍五入

NOW() - 返回当前的系统日期和时间

FORMAT() - 格式化某个字段的显示方式

GROUP BY 语句:GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

SQL GROUP BY 语法

SELECT column_name, aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name;

having aggregate_function(column_name) operator value

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log

INNER JOIN Websites

ON access_log.site_id=Websites.id)

GROUP BY Websites.name

HAVING SUM(access_log.count) > 200

例子:SELECT site_id, SUM(count) AS num FROM access_log GROUP BY site_id----统计 access_log 各个 site_id 的访问量

EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。

SELECT column_name(s)

FROM table_name

WHERE EXISTS

(SELECT column_name FROM table_name WHERE condition);

查找总访问量(count 字段)大于 200 的网站是否存在。

SELECT Websites.name, Websites.url

FROM Websites

WHERE EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);

INNER JOIN on:如果表中有至少一个匹配,则返回行

LEFT JOIN on:即使右表中没有匹配,也从左表返回所有的行,没有匹配的用null代替

RIGHT JOIN on:即使左表中没有匹配,也从右表返回所有的行,没有匹配的用null代替

FULL JOIN on:只要其中一个表中存在匹配,则返回行

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

推荐阅读更多精彩内容