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;
a.下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "country" 列:
SELECT name,country FROM Websites;
b.下面的 SQL 语句从 "Websites" 表中选取所有列:
SELECT * FROM Websites;
*************************************************************************************
*************************************************************************************
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;
*************************************************************************************
*************************************************************************************
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 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。在上个实例中 'CN' 文本字段使用了单引号。如果是数值字段,请不要使用引号。
b.数值字段引用
SELECT * FROM Website WHERE id=1;
c.WHERE 子句中的运算符
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;
结果:
b.降序排列
SELECT * FROM Websites
ORDER BY alexa DESC;
c.ORDER BY 多列
SELECT * FROM Websites
ORDER BY country ,alexa;
*************************************************************************************
*************************************************************************************
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');
b.向指定列插入数据(只在name,url ,country 列插入数据)
INSERT INTO Websites('name','url','country')
VALUES('stackoverflow','www.stackoverflow.com','IND,);
*************************************************************************************
*************************************************************************************
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='菜鸟教程';
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';
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;