SQL数据库(设置模式、数据库操作、表操作、列操作、SQL索引/约束、SQL数据类型、SQL函数、常见问题)

目录

SQL数据库

设置模式

SET NAMES utf-8

set sql_safe_updates=1

数据库操作

CREATE DATABASE databaseName(创建数据库)

USE databaseName(选择数据库)

DROP DATABASE databaseName(删除数据库)

表操作

CREATE TABLE(创建表)

DROP TABLE(删除表)

TRUNCATE TABLE table_name(删除表中数据)

添加列

删除列

修改列

JOIN(组合表)

INNER JOIN

RIGHT  JOIN(LEFT JOIN)

LEFT JOIN示例

 Full join(SQL Server)

列操作(筛选、排序、去重)

Select columnName From tableName(选)

AS(别名)

WHERE(筛选条件)

BETWEEN A AND B

IS(判断null)

IN(指定集合)

LIKE(模糊查询)

REGEXP/RLIKE(正则匹配)

SELECT DISTINCT(去重)

ORDER BY(排序)

SELECT TOP(取前多少数据SQL Server/MS Access)

LIMIT(取前多少数据MySQL)

列操作(增、删、改、组合、合并)

INSERT INTO(插入)

SELECT INTO(旧表数据插入新表!MySQL)

INSERT INTO(旧表数据插入新表)

DELETE FROM(删除)

UPDATE(修改)

CONCAT(组合多列数据)

UNION(合并数据)

SQL索引、AUTO INCREMENT、SQL约束(not null、unique、primary key、foreign key、check、defalut)

SQL视图

通用数据类型

Microsoft Access/MySQL/SQL Server中的数据类型

SQL语句GROUP BY、HAVING、EXISTS、SQL函数

SQL日期 

SQL常见问题


SQL数据库

用于访问和处理数据库的标准的计算机语言。

注意:SQL 对所有字段的大小写完全不敏感:SELECT 与 sEleCt 是相同的。下面大写表示SQL关键字。

设置模式

SET NAMES utf-8

设置使用的字符集相当于

SET character_set_client='utf8';

SET character_set_connection='utf8';

SET character_set_results='utf8';

set sql_safe_updates=1

开启安全更新数据模式(update 语句后必须携带 where 条件,否则就会报错

数据库操作

CREATE DATABASE databaseName(创建数据库)

创建databaseName数据库

USE databaseName(选择数据库)

选择databaseName数据库

DROP DATABASE databaseName(删除数据库)

删除databaseName数据库

表操作

创建删除表、删除表中所有数据、添加删除表中列字段以及改变列字段数据类型、组合合并表。

CREATE TABLE(创建表)

创建Persons表并指定列的字段和数据类型,varchar为字符,长度限定为255.

CREATE TABLE Persons
(
PersonID int,
LastName varchar(255)
);

拷贝旧表的结构和数据到新表。 

CREATE TABLE 新表
AS
SELECT * FROM 旧表 

DROP TABLE(删除表)

DROP TABLE table_name

TRUNCATE TABLE table_name(删除表中数据)

删除表内的数据,但并不删除表本身

添加列

在 "Persons" 表中添加一个名为 "DateOfBirth" 的列,数据类型为日期。

ALTER TABLE Persons
ADD DateOfBirth date

删除列

ALTER TABLE table_name
DROP COLUMN column_name

修改列

SQL Server / MS Access

ALTER TABLE table_name
ALTER COLUMN column_name datatype

My SQL / Oracle

ALTER TABLE table_name
MODIFY COLUMN column_name datatype

JOIN(组合表)

通过不同的条件组合表,组合的条件用on

注意在选择列字段时,如果两个表都有相同的字段需要指明选取哪个表中的字段

INNER JOIN

SQL数据库(设置模式、数据库操作、表操作、列操作、SQL索引/约束、SQL数据类型、SQL函数、常见问题)_第1张图片

SELECT * FROM tableA  A INNER table B ON A.key = B.key

只有满足A.key=B.key的数据才会组合后返回。

RIGHT  JOIN(LEFT JOIN)

SQL数据库(设置模式、数据库操作、表操作、列操作、SQL索引/约束、SQL数据类型、SQL函数、常见问题)_第2张图片

SELECT * FROM tableA  A RIGHT JOINN table B ON A.key = B.key

以B表为基准,B表中的每一条数据都会根据A.Key = B.Key的条件返回,B表中的一条对应A表中的多条,则将A表中的多条和B表中的一条组合返回,B表中的某条无对应则返回该条(该条数据中涉及A表中的字段值为null)

LEFT JOIN示例

Websites表

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

access_log表

+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
|   1 |       1 |    45 | 2016-05-10 |
|   2 |       3 |   100 | 2016-05-13 |
|   3 |       1 |   230 | 2016-05-14 |
|   4 |       2 |    10 | 2016-05-14 |
|   5 |       5 |   205 | 2016-05-14 |
|   6 |       4 |    13 | 2016-05-15 |
|   7 |       3 |   220 | 2016-05-15 |
|   8 |       5 |   545 | 2016-05-16 |
|   9 |       3 |   201 | 2016-05-17 |
|  10 |       6 |   111 | 2016-03-19 |
+-----+---------+-------+------------+

SQL数据库(设置模式、数据库操作、表操作、列操作、SQL索引/约束、SQL数据类型、SQL函数、常见问题)_第3张图片

 Full join(SQL Server)

 相当于LEFT JOIN与RIGHT JOIN 的和。  

 SQL数据库(设置模式、数据库操作、表操作、列操作、SQL索引/约束、SQL数据类型、SQL函数、常见问题)_第4张图片            

当添加WHERE t1.列名 IS NULL OR t2.列名 IS NULL时为下图

SQL数据库(设置模式、数据库操作、表操作、列操作、SQL索引/约束、SQL数据类型、SQL函数、常见问题)_第5张图片

列操作(筛选、排序、去重)

Select columnName From tableName(选)

选择列名columnName从表tableName中,* 号可以表示所有列

AS(别名)

可以在columnName后接AS newName或接字符串’newName’将列名重新命名,也可以对表进行重命名。

下面两示例表示意思相同

SELECT w.name , a.count
FROM Websites AS w, access_log AS a
WHERE a.count=w.id and w.name="菜鸟教程";

SELECT Websites.name, access_log.count
FROM Websites, access_log
WHERE access_log.count= Websites.id and Websites.name="菜鸟教程";

WHERE(筛选条件)

筛选符合条件的,会进行隐式类型转换where id * 3 – 6表示筛选出id=2(只有0会被转化为false)

AND表示且,OR表示或,非表示NOTNOT id > 5和id<=5表示相同<>和!=都表示不等于

BETWEEN A AND B

表示值在AB之间,包括A和B,顺序不能反,小的要在前,大的在后,可以用字母比较ASCII 值,注意是否包含AB取决于数据库类型

IS(判断null)

用于判断是否值为null,注意!=5的筛选是无法筛选出null(null不参与非IS的筛选

IN(指定集合)

用于筛选在指定集合的值,a IN (10,20,30)表示a=10 OR a = 20 OR a = 30

LIKE(模糊查询)

模糊查询,%百分号代表0个或任意个字符,相当于正则中的 [\d\D]*,_下划线代表一个字符,相当于正则中的[\d\D]

REGEXP/RLIKE(正则匹配)

使用REGEXP或rlike都表示正则匹配  WHERE name REGEXP '^J'表示匹配以J开头的name。注意后面接正则字符串。

SELECT DISTINCT(去重)

去重(只有所有选取列的对应值相同才会被去除)

ORDER BY(排序)

排序(默认按升序排列,字段后接ASC表示升序,DESC表示降序),注意ORDER BY a,b DESC表示先将b列按降序排列,再将a列按升序排列,多列字段的排序,按右到左依次对每个字段进行排序。

SELECT TOP(取前多少数据SQL Server/MS Access)

选取前多少数据,select top 7 id,name 选取前7行的id和name,7后面可以加空格percent表示前百分之7。注意有排序会先筛选排序最后再取数据

LIMIT(取前多少数据MySQL)

选取前多少数据,SELECT * FROM table LIMIT 7,表示取前7条数据。Limit 0,7和LIMIT 7 OFFSET 0都表示取前7条。注意有排序会先筛选排序最后再取数据

列操作(增、删、改、组合、合并)

INSERT INTO(插入)

向表中插入n条数据

INSERT INTO Websites (name, url, country) VALUES 
('stackoverflow', 'http://stackoverflow.com/', 'IND'),
('csdn', 'http://csdn.com/', 'cn');

表示向插入Websites表中插入2条数据,每条数据用括号包裹,逗号隔开。

注意没有指定要插入数据的列名的形式需要列出插入行的每一列数据。

SELECT INTO(旧表数据插入新表!MySQL)

在旧表中选择数据插入新表(新表不存在)

SELECT column1,column2...
INTO newtable 
FROM table1;

注意新表将会使用 SELECT 语句中定义的列名称和类型进行创建可以使用 AS 子句来应用新名称。 

INSERT INTO(旧表数据插入新表)

在旧表中选择数据插入新表(新表已存在)

INSERT INTO newTable (column1,column2...) 
SELECT column1,colum2... 
FROM ordTable

DELETE FROM(删除)

删除表中数据

DELETE FROM Websites WHERE name='Facebook';
--表示删除满足条件的行。
DELETE FROM Websites;
--表示删除该表下所有行(保留了表)

UPDATE(修改)

更新表中已存在的记录

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

CONCAT(组合多列数据)

组合多列数据为一列。

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

表示选取name和site_info列,site_info列的值由url,alexa,country列的值组成,中间以逗号和空格隔开。

UNION(合并数据)

合并两个或多个 SELECT 语句的结果集。注意UNION 内部的 SELECT 语句必须选相同数量的列、对应的列也必须拥有相似的数据类型。

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

表示将两表中的country列合并成一列,会自动去重(需保留重复的话用UNION ALL)。

注意ORDER BY会在合并后进行排序

SQL索引、AUTO INCREMENT、SQL约束(not null、unique、primary key、foreign key、check、defalut)

SQL索引、AUTO INCREMENT、SQL约束(not null、unique、primary key、foreign key、check、defalut)_YF-SOD的博客-CSDN博客

SQL视图

视图是基于 SQL 语句的结果集的可视化的表,展示部分表的内容。提供了一个统一访问数据的接口。(可以设置只读模式允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限)

MySQL学习笔记——视图_修改视图会修改原表吗_默萧756的博客-CSDN博客

通用数据类型

SQL 通用数据类型 | 菜鸟教程

Microsoft Access/MySQL/SQL Server中的数据类型

SQL MS Access、MySQL 和 SQL Server 数据类型 | 菜鸟教程

SQL语句GROUP BY、HAVING、EXISTS、SQL函数

SQL语句GROUP BY、HAVING、EXISTS、SQL函数(Null判断、日期相关、计算数值和字符串操作 )_YF-SOD的博客-CSDN博客

SQL日期 

SQL Server 和 MySQL 中的 Date 函数 | 菜鸟教程

SQL常见问题

https://deepinout.com/mysql/mysql-questions/609_mysql_commysqljdbcpackettoobigexception.html

你可能感兴趣的:(SQL,SQL数据库操作,inner/left,join,SQL增删改查操作,SQL视图,函数,数据类型,数据库排序,去重,合并,数据库设置安全模式等)