1.. In order to find the rows where the value for a column is or is not NULL, you would use IS NULL or IS NOT NULL.  ex: select * from family_members where favorite_book is not null;

2.

---------

SQL基础

本文参照:http://www.w3school.com.cn/sql/

SQL 结构化查询语言(Structured Query Language)。

对于大小写不敏感。

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。

SQL 语句后面的分号

某些数据库工具要求在每条 SQL 命令的末端使用分号。分号是在数据库系统中分隔每条 SQL 语句的标准方法。看到分号就标志着本条sql语句结束了。这样就可以在对服务器的相同请求中执行一条以上的语句。

在程序中写SQL不需要加分号,在程序之后编译器会把分号当做SQL本身的一部分,会有报错

SQL DDL 和 DML

SQL 分为两个部分:数据定义语言 (DDL) 和 数据操作语言 (DML)。

SQL 的 DDL 部分:

创建或删除表格,定义索引(键),规定表之间的链接,以及施加表间的约束。

  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

SQL 的 DML 部分:

查询、更新、插入和删除记录的语法

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据
  • SELECT 列名称 FROM 表名称
  • SELECT * FROM 表名称

SELECT 语句

星号(*)是选取所有列的快捷方式。

大多数数据库软件系统都允许使用编程函数在结果集中进行导航。详见

ADO教程 http://www.w3school.com.cn/ado/index.asp

PhP教程  http://www.w3school.com.cn/php/index.asp

SELECT DISTINCT 语句

关键词 DISTINCT 用于返回唯一不同的值

  • SELECT DISTINCT 列名称 FROM 表名称

WHERE 子句

WHERE 子句用于规定选择的标准。

  • SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

操作符

描述

=

等于

<>

不等于

在某些版本的 SQL 中,操作符 <> 可以写为 !=

>

大于

<

小于

>=

大于等于

<=

小于等于

BETWEEN

在某个范围内

LIKE

搜索某种模式

AND & OR 运算符

AND 和 OR用于基于一个以上的条件对记录进行过滤。

可在 WHERE 子语句中把两个或多个条件结合起来。

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

  • 例:

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')

AND LastName='Carter'

ORDER BY 语句用于根据指定的列对结果集进行排序。

ORDER BY 默认升序排序。 ORDER BY ASC

ORDER BY DESC 降序排列

  • SELECT A列,B列  FROM 表  order by A列 DESC ,B列 ASC

注意::在以上的结果中有两个相等的A列值时。只有这一次,在A列中有相同的值时,B列是以升序排列的。如果A列中有些值为 nulls 时,情况也是这样的。

INSERT INTO 语句

  • INSERT INTO 表名称 VALUES (值1, 值2,....)           直接指定新行每一列的值
  • INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)  指定所要插入数据的列

Update 语句用于修改表中的数据

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

  • UPDATE  表名称  SET 列名称=新值    WHERE 列名称 = 某值
  • DELETE  FROM  表名称  WHERE  列名称 = 值        指定删除行
  • DELETE FROM table_name

DELETE 语句用于删除表中的行

或DELETE * FROM table_name         可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的

TOP 子句

  • SELECT TOP N * FROM  表        从表中选取头N条数据
  • SELECT TOP N PERCENT * FROM 表             从表中选取头N%的数据

MySQL语法: SELECT *  FROM 表  LIMIT 5

Oracle语法:SELECT *  FROM 表  ROWNUM<= 5

LIKE 用于在 WHERE 子句中搜索列中的指定模式。

  • SELECT  FROM  表  WHERE  列名称 like 值

提示:"%" 可用于定义通配符(模式中缺少的字母)。替代一个或多个字符

like  'N%'        从表中选取以N开头的记录

like  '%g'      从表中选取以g结尾的记录

like  '%lon%'   从表中选取包含lon的记录

not like  ''   从表中选取不包含 的记录

使用 _ 通配符,替代一个字符

  • SELECT * FROM   表 WHERE  列  LIKE '_bc'

--从表中选取名字的第一个字符之后是 "bc" 的人

[charlist]  代表字符列中任何单一字符

  • SELECT * FROM  表  WHERE  列  LIKE '[CP]%'           查找A列值是以C或P开头的记录
  • SELECT * FROM  表  WHERE  A列  LIKE '[C-P]xyz'       查找A列值是以介于C与P之间的任何单个字符开始且以xyz结尾的记录
  • SELECT * FROM  表  WHERE  A列  LIKE 'de[^1]'        查找A列值是de开始且其后的字母不为1的记录
  • SELECT * FROM  表  WHERE  列  LIKE '[!CP]%'           查找A列值不以C或P开头的记录
  • SELECT  列名  FROM  表   WHERE   列名  IN  (value1,value2,...)
  • SELECT 列名  FROM  表  WHERE 列名  BETWEEN  value1  AND  value2

[^charlist] 或 [!charlist]   不在字符列中的任何单一字符

IN 操作符允许在where子句中规定多个值

BETWEEN…and 操作符,选取结余两个值(数值、文本、日期)之间的数据范围

重要事项:不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。

某些数据库会列出介于 " value1  " 和 " value2" 之间的人,但不包括 " value1  " 和 " value2" ;

某些数据库会列出介于 " value1  " 和 " value2" 之间并包括 " value1  " 和 " value2" 的人;

而另一些数据库会列出介于 " value1  " 和 " value2" 之间的人,包括 " value1  " ,但不包括 " value2" 。

  • SELECT 列名  FROM  表  WHERE 列名  NOT  BETWEEN  value1  AND  value2

显示在范围之外的记录

As 可以为列名称和表名称指定别名,使查询程序易于阅读和书写

  • SELECT   列  FROM  表   AS  表别名
  • SELECT 列  AS 列别名    FROM 表

join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

  • JOIN: 如果表中有至少一个匹配,则返回行
  • INNER JOIN: 等值连接,只返回两个表之后连接字段想等的行

Select  * from 表A  inner join  表B   on  A.XX=B.XX

重要事项:类似正常的查询。不以任何表为基础。只显示符合搜索条件的数据。

  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 ( LEFT OUTER JOIN)

Select  * from 表A  left  join  表B   on  A.XX=B.XX

重要事项:以A表为基础,即左表的记录全部显示出来。而表B只显示符合搜索条件的记录出来。即右表根据条件显示,不足的以NULL填充显示。

LEFT JOIN 关键字会从左表返回所有的行,即使在右表中没有匹配的行。

  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 ( RIGHT OUTER JOIN)

Select  * from 表A  right  join  表B   on  A.XX=B.XX

重要事项:效果与left join正好相反,以右表的数据为基础,显示右表全部数据,而只显示左表符合搜索条件的数据。

RIGHT JOIN 关键字会从右表那里返回所有的行,即使在左表中没有匹配的行。

  • FULL JOIN: 只要其中一个表中存在匹配,就返回行 ( FULL  OUTER JOIN)

重要事项:产生A和B的并集。但是需要注意的是,对于没有匹配的行记录,空值列则会以null做为值。

FULL JOIN 关键字会从左表和右表那里返回所有的行。如果 左表 中的行在表 右表 中没有匹配,或者如果 右表 中的行在表 左表 中没有匹配,这些行同样会列出。

参照:http://jingyan.baidu.com/article/e6c8503c31d2f7e54e1a1851.html

http://www.nowamagic.net/librarys/veda/detail/936

UNION 操作符用于合并两个或多个 SELECT 语句的结果集

注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

  • SELECT 列  FROM  表A

UNION

SELECT 列  FROM  表B

默认地,UNION 操作符选取不同的值。得出的结果集中已经去重,若存在多条值相同的数据,只显示一条。

  • SELECT 列  FROM  表A

UNION ALL

SELECT 列  FROM  表B

UNION ALL是允许重复的值。若得出的结果中存在多条值相同的数据,会显示多条记录。

UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

SELECT INTO 语句用于创建表的备份复件

从一个表中选取数据,然后把数据插入另一个表中

  • SELECT *  INTO 新表名B   FROM  旧表名A           --从表A中备份所有到表B
  • SELECT *  INTO 表名A  in  ‘备份数据库bk.mdb’  FROM  表名A       --in子句可向另一个数据库中拷贝表
  • SELECT  列A,列B,列C   INTO 新表名B   FROM  旧表名A      --拷贝指定列插入新表

Select into 可以和 where 、join等搭配使用

Create  Database创建数据库

  • CREATE DATABASE  database_name
  • CREATE TABLE 表名称

Create  Table创建数据库中的表

(

列名称1 数据类型  NOT NULL,    // NOT NULL约束指强制列1不接受空值

列名称2 数据类型  NOT NULL UNIQUE, //约束列2的值要有唯一性

列名称3 数据类型  PRIMARY KEY,  //约束列3的值为主键

....

UNIQUE (列名称1)   //约束列1的值要有唯一性

CONSTRAINT 约束名 UNIQUE (列1,列2)  //同时为多个列定义UNIQUE唯一性

PRIMARY KEY (列4)  //约束列4为主键,主键自动具有非空属性

CONSTRAINT 约束名 UNIQUE (列5,列6)  //设置列5、6为联合主键。单列可以有相同值,组合后的主键具有唯一性  ps:一个表中只能有一个主键,此处为举例,没分多表

)

增加 UNIQUE 约束

  • Alter table 表名  ADD UNIQUE (列名1)
  • Alter table 表名  ADD CONSTRAINT约束名 UNIQUE (列名1, 列名2)

撤销 UNIQUE 约束

  • Alter table 表名  DROP INDEX  约束名    --mySQL
  • Alter table 表名  DROP CONSTRAINT  约束名       --SQL server,Oracle ,MS Access

增加 PRIMARY KEY 约束

  • Alter table 表名  PRIMARY KEY (列名1)
  • Alter table 表名  ADD CONSTRAINT 主键名 PRIMARY KEY (列名1, 列名2)

注释:如果您使用 ALTER TABLE 语句添加主键 PRIMARY KEY,必须把主键列声明为不包含 NULL 值(在表首次创建时)。

撤销  PRIMARY KEY约束

  • Alter table 表名  DROP PRIMARY KEY    --mySQL
  • Alter table 表名  DROP CONSTRAINT  主键名      --SQL server,Oracle ,MS Access

SQL中最常用的数据类型:

数据类型

描述

integer(size)

int(size)

smallint(size)

tinyint(size)

仅容纳整数。在括号内规定数字的最大位数。

decimal(size,d)

numeric(size,d)

容纳带有小数的数字。

"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。

char(size)

容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。

在括号中规定字符串的长度。

varchar(size)

容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。

在括号中规定字符串的最大长度。

date(yyyymmdd)

容纳日期。

FOREIGN KEY 约束

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

  • CREATE TABLE 表名称A

(

列名称1 数据类型  FOREIGN KEY REFERENCES 表B(列B1),   

//设定列1为外键关联表B  (SQL Server / Oracle / MS Access)

列名称2 数据类型

FOREIGN KEY (列2) reference表B(列B1),

/ /设定列1为外键关联表B  (mysql)

....

CONSTRAINT 外键名 FOREIGN KEY (列A2)  REFERENCES表B(列B2)

//设定列A2为关键关联表B 列B2  (MySQL / SQL Server / Oracle / MS Access)

)

创建 FOREIGN KEY 约束

  • Alter table 表名  ADD FOREIGN KEY (列名1)  REFERENCES表B(列B2)

Alter table 表名  ADD CONSTRAINT外键名 FOREIGN KEY (列名1)  REFERENCES表B(列B2)

撤销 FOREIGN KEY 约束

  • Alter table 表名  DROP FOREIGN KEY  外键名    --mySQL
  • Alter table 表名  DROP CONSTRAINT  外键名       --SQL server,Oracle ,MS Access

SQL CHECK 约束

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制

  • CREATE TABLE 表名称A

(

列名称1 int NOT NULL  CHECK (列1>0)  //(SQL Server / Oracle / MS Access)

列名称2 数据类型

....

CHECK (列2>0)  //mysql

)

…..更多详细介绍,参照 http://www.w3school.com.cn/sql/sql_check.asp

DEFAULT 约束

用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。

  • CREATE TABLE 表名称A

(

列名称1 数据类型

列名称2 数据类型  DEFAULT ‘AAAAA’

....

OrderDate date DEFAULT GETDATE()

//使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值

)

DATE 函数

用于向列中插入默认值

MySQL Date 函数

下面的表格列出了 MySQL 中最重要的内建日期函数:

函数

描述

NOW()

返回当前的日期和时间

CURDATE()

返回当前的日期

CURTIME()

返回当前的时间

DATE()

提取日期或日期/时间表达式的日期部分

EXTRACT()

返回日期/时间按的单独部分

DATE_ADD()

给日期添加指定的时间间隔

DATE_SUB()

从日期减去指定的时间间隔

DATEDIFF()

返回两个日期之间的天数

DATE_FORMAT()

用不同的格式显示日期/时间

SQL Server Date 函数

下面的表格列出了 SQL Server 中最重要的内建日期函数:

函数

描述

GETDATE()

返回当前日期和时间

DATEPART()

返回日期/时间的单独部分

DATEADD()

在日期中添加或减去指定的时间间隔

DATEDIFF()

返回两个日期之间的时间

CONVERT()

用不同的格式显示日期/时间

AVG函数 ,返回平均值

  • SELECT AVG(column_name) FROM table_name

count函数 ,返回匹配指定条件的行数

  • SELECT count(column_name) FROM table_name      返回指定列的值的数目
  • SELECT count(distinct  column_name) FROM table_name    返回指定列的不同值的数目
  • SELECT count(*) FROM table_name  返回表中的记录数

FIRST函数 ,返回指定字段之后第一个记录的值

提示:可使用 ORDER BY 语句对记录进行排序。

  • SELECT first(column_name) FROM table_name

Last函数 ,返回指定字段之后第一个记录的值

  • SELECT last(column_name) FROM table_name

提示:可使用 ORDER BY 语句对记录进行排序。

MID函数 ,从指定列提取字符

  • SELECT MID(列名必填,开始位置必填起始值为1[,结束位置]可选输入要返回的字符数) FROM table_name

SELECT MID(City,1,3) as SmallCity FROM Persons  从 "City" 列中提取前 3 个字符。

len函数 ,返回文本字段之后值的长度

SELECT len(列名 ) FROM table_name

round函数 ,把数值字段摄入为指定的小数位数

  • SELECT MID(列名必填要舍入的字段,decomals要返回的小数位数) FROM table_name

max函数 ,返回最大值

  • SELECT max(列名) FROM table_name

min函数 ,返回最小值

  • SELECT min(列名) FROM table_name

sum函数 ,返回列总和

  • SELECT sum(列名) FROM table_name

ucase函数 ,upper 把字段值转化为大写

  • SELECT ucase(列名) FROM table_name

lcase函数 ,把字段值转化为小写

  • SELECT lcase(列名) FROM table_name

Group by语句 ,根据一个列或多个列队结果集进行分组,配合聚合函数使用

  • SELECT * FROM table_name  where 条件1 group by 列名

Select name,sum(score) where  xx group by name  --查询出每个人的分数总和

不配合聚合函数使用时,group by 后需要列出所有的列,否则会有报错…虽不会报错,但是group也没有任何意义了,没发挥作用。

Having by语句 ,根据一个列或多个列队结果集进行分组,配合聚合函数使用

  • SELECT * FROM table_name  where 条件1 group by 列名 having 条件2

WHERE语句在GROUPBY语句之前;SQL会在分组之前计算WHERE语句。 
HAVING语句在GROUPBY语句之后;SQL会在分组之后计算HAVING语句。

当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:
--执行where子句查找符合条件的数据;
--使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。
--having 子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle.
--having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制。
--having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以。

SQL常用

select *

from 表

where 条件1   order by 列A  desc limit 20;

 

SELECT

count(1)

FROM  表A

WHERE  条件1

AND EXISTS(

SELECT 0

FROM  表B

WHERE  条件2

)

And  条件3

select  date_add(operate_time, interval 15 day), #状态变更时间+15天

NOW(), #当前时间

DATEDIFF(date_add(operate_time, interval 15 day),NOW()) #截止时间(当前-状态变更时间)

from 表

where 条件1   order by 列1 DESC

 

date_add(operate_time, interval 3 month), #状态变更时间+3个月

 

 

 

【SQL】基础概念的更多相关文章

  1. 【读书笔记】--SQL基础概念复习

    主键:每个表,只能有一个主键,主键不能为NULL,且必须是唯一的.主键最好是由单个列组成,但这不是必须的,主键也可以是由多个列组成,如果表的两个列组合在一起能唯一标识一个行,而单个列不能,则可以将这两 ...

  2. SQL基础概念-指令

    1,MySQL:(structured query  language)用于访问和处理数据库的标准语言      2,什么是 SQL?      SQL 指结构化查询语言      SQL 使我们有能 ...

  3. SQL——基础概念

    服务器登录名:指有权限登录到某服务器的用户:如sa 服务器角色:指一组固定的服务器用户,默认有9组: 登录名一定属于某些角色,默认为public 服务器角色不容许更改 登录后也不一定有权限操作数据库 ...

  4. SQL 基础学习(2) Joining 和function , 作业没有做,需要看百宝箱。NOsql的概念

    SQL 基础学习(2) Joining 可以同时关联(joining)多张表进行复杂的查询. 相比于用Rails捞出数据再用Ruby进行过滤组合,使用SQL更加高效,节能. 以下是 users has ...

  5. SQL基础之数据库

    1.基础概念 首先要强调一点,就是我们的数据库是由数据库系统来管理的,我们登入数据库并在其上进行操作时最终均要通过数据库系统来完成.可以理解成在数据库上进行操作的是客户端,数据库系统是服务端.一个数据 ...

  6. 第一章 SQL基础

    第一部分:SQL基础1. 为什么学习SQL自人类社会形成之日起,社会的运转就在不断地产生和使用各种信息(文献.档案.资料.数据等):在如今所谓的信息时代,由于计算机和互联网的作用,信息的产生和使用达到 ...

  7. Java面试题精选(一)基础概念和面向对象

    --   基础概念和面向对象   --      全程将为大家剖析几大部分内容,由于学习经验有限,望大家谅解并接受宝贵的意见: 基础概念部分     ★★   : 常出现的高频率单词的区别理解(异常. ...

  8. JavaWeb开发技术基础概念回顾篇

    JavaWeb开发技术基础概念回顾篇 第一章 动态网页开发技术概述 1.JSP技术:JSP是Java Server Page的缩写,指的是基于Java服务器端动态网页. 2.JSP的运行原理:当用户第 ...

  9. 基础概念:Oracle数据库、实例、用户、表空间、表之间的关系

    基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库 ...

随机推荐

  1. Anaconda切换工作目录盘符

    先回到C盘符的根目录再切换到其他盘符

  2. 安全师(网络安全类pdf电子书籍)

    2020-02-17  天气晴,西安. 今天找到一个可以下载网络安全(渗透,kali,web)电子书籍网站. https://www.secshi.com/

  3. NIO学习笔记,从Linux IO演化模型到Netty—— Netty零拷贝

    Netty的中零拷贝与上述零拷贝是不一样的,它并不是系统层面上的零拷贝,只是相对于ByteBuf而言的,更多的是偏向于数据操作优化这样的概念. Netty中的零拷贝: 1.CompositeByteB ...

  4. 使用TableHasPrimaryKey或TableHasForeignKey来知道表是否有主键或外键

    从下面2句SQL语句执行来看, 就知道那一张表有主键PrimaryKey或ForeignKey. 比如,表[Q]和[QQ]既没有主键,也没有外键. 当在SQL语句的条件中,使用“=”,那说明查询出来的 ...

  5. maven的核心概念——聚合

    第十六章聚合 16.1 为什么要使用聚合 将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效.修改源码后也需要逐个手动进行clean操作.而使用了聚合之后就可以批量进行Maven工程的安装 ...

  6. 如何规范git commit提交

    相信很多人使用SVN.Git等版本控制工具时候都会觉得每次提交都要写一个注释有什么用啊?好麻烦,所以我每次都是随便写个数字就提交了,但是慢慢的我就发现了,如果项目长期维护或者修改很久之前的项目,没有一 ...

  7. Linux命令(1)——top命令

    一.功能 显示当前系统正在执行的进程的相关信息[进程ID.内存占用率.CPU占用率等] 性能分析工具 实时动态显示(系统中各个进程的资源占用情况) 二.用法 -b                    ...

  8. vc6 保存文件卡住

    解决办法:删除工程文件中的三个文件,分别是:*.ncb  * .opt   * .plg引用链接:https://blog.csdn.net/lvxianlong123/article/details ...

  9. C++->10.3.5.从键盘上输入职工的编号,从职工信息文件中查找该职工资料,查找成功时显示职工姓名、电话号码,邮政编码和地址。

    p=getchar(); }  printf("\n"); rewind(in);         //文件流指针移到文件开始位置 p=fgetc(in); while(!feof ...

  10. 超级丑数--用查找的api解决

    质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数:否则称为合数. 质因数(素因数或质因子)在数论里是指能整除给定正整数的质数.除了1以外,两个没有其他共同质因子的正 ...