数据库相关用法

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:只要其中一个表中存在匹配,则返回行

你可能感兴趣的:(数据库相关用法)