SQL的学习

SQL的学习之路,主要参考资料是:

  1. SQL必知必会
  2. W3school的SQL简介

操作使用的数据库为Access及MySQL。

数据采用的是SQL必知必会中的数据(最下方可以下载数据)。其有5个表,表的关系如下:

看不清的图片:右击新标签页打开即可。


1.SQL基础

2.检索数据


3.排序检索数据

4.过滤数据

5.高级过滤

6.通配符过滤

7.创建计算字段

8.函数特性

9.函数

 

10.汇总数据

11.分组数据

以上测试均在Access数据库中进行,以下于MySQL中进行,通过workbench(版本6.3)操作。


12.子查询

这里说白了就是select语句嵌套,如select * from (select cust_name from customers)

13.联结

笛卡尔积

14.高级联结

15.组合查询

关于规则中列顺序,前后必须一致否则会出现如下情况:

1 use test;
2 select cust_name ,cust_email,cust_contact
3 from customers
4 where cust_state in (‘IL‘,‘IN‘,‘MI‘)
5 union all
6 select cust_name,cust_contact,cust_email
7 from customers
8 where cust_name = ‘Fun4All‘

返回结果为:

 
cust_name cust_email cust_contact
Village Toys [email protected] John Smith
Fun4All [email protected] Jim Jones
The Toy Store   Kim Howard
Fun4All Jim Jones [email protected]
Fun4All Denise L. Stephens [email protected]

列的顺序一致,才会返回正确结果

1 use test;
2 select cust_name ,cust_email,cust_contact
3 from customers
4 where cust_state in (‘IL‘,‘IN‘,‘MI‘)
5 union all
6 select cust_name,cust_email,cust_contact
7 from customers
8 where cust_name = ‘Fun4All‘

结果:

cust_name  cust_email cust_contact
Village Toys [email protected] John Smith
Fun4All [email protected] Jim Jones
The Toy Store   Kim Howard
Fun4All [email protected] Jim Jones
Fun4All [email protected] Denise L. Stephens

16.插入数据

INSERT SELECT:

它可以将SELCET语句结果插入表中,在某种意义上可以完成表的复制

如:

 1 USE test;#使用数据库test
 2 CREATE TABLE CustNew
 3 (
 4   cust_id      char(10)  NOT NULL ,
 5   cust_name    char(50)  NOT NULL ,
 6   cust_address char(50)  NULL ,
 7   cust_city    char(50)  NULL ,
 8   cust_state   char(5)   NULL ,
 9   cust_zip     char(10)  NULL ,
10   cust_country char(50)  NULL ,
11   cust_contact char(50)  NULL ,
12   cust_email   char(255) NULL
13 );#创新新表
14 INSERT INTO CustNew
15 (
16 cust_id,
17 cust_name,
18 cust_address,
19 cust_city,
20 cust_state,
21 cust_zip,
22 cust_country,
23 cust_contact,
24 cust_email
25 )
26 SELECT
27 cust_id,
28 cust_name,
29 cust_address,
30 cust_city,
31 cust_state,
32 cust_zip,
33 cust_country,
34 cust_contact,
35 cust_email
36 FROM customers;#将customers表的数据插入新表alter
37 SELECT * FROM CustNew;

返回结果如下:

而如果反过来用,大概就是:

1 insert into
2 customers
3 (列1,列2,......)
4  select
5 列1,列2,.....
6  from custnew

即可完成将表custnew中的数据全部插入customers,这也完成了一条insert插入多条数据。

通常,一条INSERT 语句,只能插入一行数据,要插入多行,就必须执行多个INSERT,但是, INSERT SELECT 是个例外。

以上方法的复制,实际上是重新在数据库中创建了一个新表。

SELECT INTO:

这种方法,可以在SQL语句运行中创建一个表,并将一个表复制到这个全新的表。

我们可以在实验新的SQL语句前,用其进行复制,这样就不影响到实际数据。

如:

USE test;#使用数据库
CREATE TABLE Cucopy as
SELECT * FROM customers;#复制
SELECT * FROM Cucopy;

返回结果,与上表一致。

17.更新和删除

18.创建和操纵表

这里中点说一下创建表时,指定默认值的问题。一般来说,创建表时,我们需要指定列的数据类型、是否NULL列。关于NULL值具体说明请看下图。

默认值要是用的好,可以省却我们很多时间。

因其经常用于指定默认日期,这里以日期为例。

首先,在MySQL中内建的日期函数:

函数 描述
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间按的单独部分
DATE_ADD() 给日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT() 用不同的格式显示日期/时间

创建数据库t2,插入表。如下:

CREATE DATABASE t2;
USE t2;
CREATE TABLE test
(id int(5) NOT NULL,
noedate timestamp NOT NULL DEFAULT current_timestamp()
);

调用如下:

USE t2;
INSERT INTO test(id)
values(1);
SELET * FROM test;

返回结果:

id nowdate
1 2017-05-08 22:09:45

以下SQL不合法:

--time_d time NOT NULL DEFAULT CURTIME(),
--date_e date NOT NULL DEFAULT CURDATE(),
--datetime_f datetime NOT NULL DEFAULT NOW(), 

DATETIME类型:NOW()函数以‘YYYY-MM-DD HH:MM:SS‘返回当前的日期时间,可以直接存到DATETIME字段中。不支持使用系统默认值。

DATE类型:CURDATE()以‘YYYY-MM-DD‘的格式返回今天的日期,可以直接存到DATE字段中。不支持使用系统默认值。

TIME类型:CURTIME()以‘HH:MM:SS‘的格式返回当前的时间,可以直接存到TIME字段中。不支持使用系统默认值。

常见错误:

CREATE TABLE dnt_forums
(
aa int NOT NULL DEFAULT (‘‘),
bb date NOT NULL DEFAULT (getdate()),
cc char(50) NOT NULL DEFAULT (null)
);

aa 是 int 类型,默认值也得是整型,并且default后边不要()括号 。
bb date类型不支持使用系统默认值,改成timestamp,能过now()取系统时间 。
cc 已经不允许为空(not null)所以不能默认为 null ,可以改成空字符串 。

修改:

CREATE TABLE dnt_forums(
aa int NOT NULL DEFAULT 2,
bb timestamp NOT NULL DEFAULT now(),
cc char(50) NOT NULL DEFAULT ‘‘
); 

这个日期问题,依然有很多不太明白的地方,以后学习过程碰到继续解决。

主要参考:

脚本之家博客

重命名表:

RENAME TABLE  cucopy1 TO hi;

删除表:

DROP TABLE hi;
时间: 2024-08-11 09:53:32

SQL的学习的相关文章

SQL server学习

慕课网sql server学习 数据库第一印象:desktop--web server--database server** 几大数据库:sql server.oracle database.DB2.MySql.MongoDB.....(SQL结构性查询语言) 安装软件:SQL Server Management Studio 附加.分离(attach.detach)数据库文件: 数据库图表关系图: 关系型数据库: 二维表.主键.外键 T-SQL简介: T-SQL query--从数据库中查询索

SQL 语句学习

Sql语句学习 一. select playerId, count(playerId) as num from OperateLog_$i where playerId > 0 and rootId = 12 and typeId = 12156 and actionTime >= 1381509000000 and actionTime <= 1381511220000 group by playerId having count(*) > 2; this-- > 可以计算

SQL触发器学习

? 简介 触发器是一种特殊类型的存储过程.触发器分为: DML( 数据操纵语言 Data Manipulation Language)触发器:数据库中表或视图的数据更改时触发,包括insert,update,delete语句 DDL(数据定义语言 Data Definition Language)触发器:表或索引中的create.alter.drop语句. 登陆触发器:是指当用户登录SQL SERVER实例建立会话时触发. ? 优劣 可以强制执行业务规则: Microsoft SQL Serve

mysql学习之三:sql语句学习

SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统.SQL 语句用于取回和更新数据库中的数据.SQL 可与数据库程序协同工作,比如MySQL. MS Access.DB2.Informix.MS SQL Server.Oracle.Sybase 以及其他数据库系统. 不幸地是,存在着很多不同版本的 SQL 语言,但是为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(比如 SELECT.UPDATE.DELETE.INSERT.WHERE 等等).

mysql学习之四:sql语句学习2

创建数据库: CREATE DATABASE stefan; 删除数据库: DROP DATABASE stefan; 重命名数据库: 重命名数据库没有直接的办法. 已经不再使用的方法: RENAME DATABASE stefan TO LCDB; 创建表格语法: CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... )   查看一个表格结构: DESCRIBE Persons;     ALTER TABLE 语句用于在已有的表中添

mysql学习之五:sql语句学习3

好吧,大家觉得这种字体还是比较好看,所有我们就换这种字体了. INSERT INTO 语句用于向表格中插入新的行. 语法 INSERT INTO 表名称 VALUES (值1, 值2,....) 我们也可以指定所要插入数据的列: INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) Update 语句用于修改表中的数据. 语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 DELETE 语句用于删除表中

sql语句学习

select top 1 id from AddWorkFlow order by id desc返回查询结果中前几条数据 select count(1) as total from Base_Users where DeptId='101010102' and iDel=0返回查询的记录个数 select max(UserId) as total from Base_Users where DeptId='101010102' and iDel=0返回查询内容的最大值或最大长度 select

SQL语句学习手册实例版

SQL语句学习手册实例版 表操作 例1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, 0) NOT NULL SNAME    CHAR (8) NOT NULL AGE      NUMERIC(3,0) SEX      CHAR(2) BPLACE  CHAR(20) PRIMARY KEY(SNO)) 例2  对于表的教学管理数据库中的表 ENROLLS ,可以定义如下: C

SQL菜鸟学习札记(一)

刚开始学SQL,从最基础的语句开始写,用一个LOL数据库做实验.目前使用的工具是MySQL Workbench,感觉比较顺手,界面没花多久时间就读懂的差不多了,所以目前就使用这个工具来做SQL的学习了. (1)多条件查询,然后修改值.因为我这里是需要编辑原来是0值的行,所以多条件查询中使用的是 A = 0为条件搜索. 刚刚提到的0值行就是这个样子,刚开始Copy行的时候遇到了很奇葩的错误--有些行必须存在默认值才能将数据进行表与表之间的Copy和Paste,所以就给默认值放了个0值. (2)仔细