1.SQL语法-(Structured query language结构化查询语言)

a.  SQL 能做什么?

      SQL 面向数据库执行查询

  • SQL 可从数据库取回数据
  • SQL 可在数据库中插入新的记录
  • SQL 可更新数据库中的数据
  • SQL 可从数据库删除记录
  • SQL 可创建新数据库
  • SQL 可在数据库中创建新表
  • SQL 可在数据库中创建存储过程
  • SQL 可在数据库中创建视图
  • SQL 可以设置表、存储过程和视图的权限

b.要创建一个显示数据库中数据的网站,您需要:

  • RDBMS 数据库程序(比如 MS Access、SQL Server、MySQL)
  • 使用服务器端脚本语言,比如 PHP 或 ASP
  • 使用 SQL 来获取您想要的数据
  • 使用 HTML / CSS

c.RDBMS

RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。

RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。

RDBMS 中的数据存储在被称为表的数据库对象中。

表是相关的数据项的集合,它由列和行组成。

d.数据库表

一个数据库通常包含一个或多个表。每个表由一个名字标识(例如:"Websites"),表包含带有数据的记录(行)。

在本教程中,我们在 MySQL 的 RUNOOB 数据库中创建了 Websites 表,用于存储网站记录。

我们可以通过以下命令查看 "Websites" 表的数据:

mysql> use RUNOOB;
Database changed

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM Websites;

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

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

           SELECT * FROM Websites; 读取数据表的信息。

SQL 对大小写不敏感:SELECT 与 select 是相同的。

*************************************************************************************

*************************************************************************************

2.SQL SELECT 语句

SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。

语法:

SELECT  column_name,column_name
FROM  table_name;
与:SELECT *  FROM  table_name;

sql server 如果更新成功则记录_SQL

a.下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "country" 列:

SELECT name,country  FROM Websites;


sql server 如果更新成功则记录_SQL_02


b.下面的 SQL 语句从 "Websites" 表中选取所有列:

SELECT * FROM Websites;

sql server 如果更新成功则记录_数据_03

*************************************************************************************

*************************************************************************************



3.SQL SELECT DISTINCT 语句


在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。DISTINCT 关键词用于返回唯一不同的值。


语法:

SELECT DISTINCT column_name,column_name
FROM  table_name;


a.下面的 SQL 语句仅从 "Websites" 表的 "country" 列中选取唯一不同的值,也就是去掉 "country" 列重复值:

SELECT DISTINCT country FROM Website;



sql server 如果更新成功则记录_数据_04


*************************************************************************************

*************************************************************************************


4.SQL WHERE


WHERE 子句用于提取那些满足指定标准的记录。用于过滤记录。


语法:

SELECT column_name,column_name

FROM table_name 

WHERE column_name operator value;

a.下面的 SQL 语句从 "Websites" 表中选取国家为 "CN" 的所有网站:

SELECT *FROM Websites WHERE country=' CN';

sql server 如果更新成功则记录_SQL_05

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。在上个实例中 'CN' 文本字段使用了单引号。如果是数值字段,请不要使用引号。

b.数值字段引用

SELECT * FROM Website WHERE id=1;


sql server 如果更新成功则记录_数据_06


c.WHERE 子句中的运算符

sql server 如果更新成功则记录_数据库_07

c1:搜索 empno 等于 7900 的数据:

SELECT * FROM emp  WHERE  empno >7900;

c2:Where +条件(筛选行)

SELECT * FROM emp WHERE ename='SMITH';

例子中的 SMITH 用单引号引起来,表示是字符串,字符串要区分大小写。

c3:逻辑运算

And:与 同时满足两个条件的值。

SELECT  *FROM emp WHERE sal>2000 andsal<4000;

Or:或 满足其中一个条件的值

SELECT * FROM emp WHERE sal>2000 or len<3000;

Not:非 满足不包含该条件的值。

SELECT *FROM emp  WHERE not sal>3000;

逻辑运算的优先级:

()    not        and         or

d.特殊条件

d1:空值判断: is null

SELECT  * FROM emp  WHERE  sal is null;

d2:between and (在 之间的值)

SELECT  * FROM emp WHERE sal between 1000 and 2000;

d3:In

Select * from emp where sal in (5000,3000,1500);

查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。

d4:Like模糊查询

SELECT * FROM emp WHERE sal Like 'M%';

查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。

  •  % 表示多个字值,_
  •  M%
  •  %M%
  •  %M_ : 表示查询以M在倒数第二位的所有内容。

d5:

WHERE子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当0时转化为 false,当其他值是转化为true。例如:

SELECT studentNO FROM student WHERE 0

则会返回一个空集,因为每一行记录WHERE都返回false。

SELECT  studentNO  FROM student WHERE 1

*************************************************************************************

*************************************************************************************

5.SQL AND & OR


a. AND 运算符实例-下面的 SQL 语句从 "Websites" 表中选取国家为 "CN" 且alexa排名大于 "50" 的所有网站


SELECT * FROM Websites WHERE  country='CN' and alexa=50;


b.OR   运算符实例 -下面的 SQL 语句从 "Websites" 表中选取国家为 "USA" 或者 "CN" 的所有客户:


SELECT * FROM emp WHERE country='USA'  or country='CN';


c.结合两者实例


SELECT * FROM Websites
WHERE alexa > 15
AND (country='CN' OR country='USA');


*************************************************************************************

*************************************************************************************

6.SQL ORDER BY 关键字


ORDER BY 用于对结果集进行(一个列,或多个列;默认按照升序对记录进行,如果降序要使用关键字DESC)排序。


SELECT column_name,column_name

FROM table_name

ORDER BY   column_name,column_name ASC|DESC;

a.下面的 SQL 语句从 "Websites" 表中选取所有网站,并按照 "alexa" 列排序:

SELECT * FROM Websites

ORDER BY alexa;

结果:

sql server 如果更新成功则记录_数据_08

b.降序排列

SELECT * FROM Websites

ORDER BY alexa DESC;



sql server 如果更新成功则记录_数据_09

c.ORDER BY 多列

SELECT * FROM Websites

ORDER BY country ,alexa;

sql server 如果更新成功则记录_数据_10

*************************************************************************************

*************************************************************************************

7.SQL INSERT INTO


INSERT INTO 用于表示向表中插入新纪录-两种编写方式

第一种:无需指定插入数据的列名,只需要提供插入的值

INSERT INTO table_name

VALUES(value1,value2,value3,...);

第二种:需要指定插入数据的列名和插入的值

INSERT INTO table_name(column 1,column2,...)

VALUES (value1,value2,value3,...);

a.假设我们要向 "Websites" 表中插入一个新行(id列自动更新)

INSERT INTO Websites(name,url,alexa,country)

VALUES('百度','https//www.baidu.com','4','CN');


sql server 如果更新成功则记录_SQL_11


b.向指定列插入数据(只在name,url ,country 列插入数据)

INSERT INTO Websites('name','url','country')

VALUES('stackoverflow','www.stackoverflow.com','IND,);

sql server 如果更新成功则记录_数据库_12

*************************************************************************************

*************************************************************************************

8.SQL UPDATE 语句

用于更新表中已存在的记录

语句:

UPDATE  table_name

SET column1=value1,column2=value2

WHERE some_column1=some_value1;

WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

a.假设我们要把 "菜鸟教程" 的 alexa 排名更新为 5000,country 改为 USA。

UPDATE  Websites 

SET alexa='5000',country='USA'

WHERE  name='菜鸟教程';

sql server 如果更新成功则记录_数据_13

b.Update 警告!

在更新记录时要格外小心!在上面的实例中,如果我们省略了 WHERE 子句,如下所示:


UPDATE Websites
SET alexa='5000', country='USA'


执行以上代码会将 Websites 表中所有数据的 alexa 改为 5000,country 改为 USA。

执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。

*************************************************************************************

*************************************************************************************

9.SQL DELETE 语句

DELETE 语句用于删除表中的记录。-WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

语法:

DELETE FROM table_name

WHERE some_column=some_value;

a.假设我们要从 "Websites" 表中删除网站名为 "百度" 且国家为 CN 的网站 。

DELETE FROM Website

WHERE name='百度' and country=‘CN';

sql server 如果更新成功则记录_数据库_14

b.删除所有数据

您可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:

DELETE  FROM table_name;
或:DELETE *  FROM table_name;


c:SQL关于删除的三个语句,DROP;TRUNCATE;DELETE的区别。

DROP:

DROP test;

删除表test,并释放空间,将test删除的一干二净。

TRUNCATE:

TRUNCATE test;

删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。

DELETE:

1、删除指定数据

删除表test中年龄等于30的且国家为US的数据

DELETE FROM test WHERE age=30 AND country='US';

2、删除整个表

仅删除表test内的所有内容,保留表的定义,不释放空间。

DELETE FROM test 或者 DELETE FROM test;
DELETE * FROM test 或者 DELETE * FROM test;