SQL学习笔记

一、SQL 简介

1. SQL(Structured Query Language),指结构化查询语言,让您可以访问和处理数据库。

2. SQL可以面向数据库执行查询、可从数据库取回数据、可在数据库中插入新的记录、可更新数据库中的数据、可从数据库删除记录
可创建新数据库、可在数据库中创建新表、可在数据库中创建存储过程、可在数据库中创建视图、可以设置表、存储过程和视图的权限。

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

4. MySQL 安装:https://www.runoob.com/mysql/mysql-install.html

 

三、SQL语法

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

2. 某些数据库系统要求在每条 SQL 语句的末端使用分号。分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上
的 SQL 语句。

3. SQL中使用单引号或双引号括住的是文本,没有用引号括住的是数值。

 

四、SQL 命令

一些最重要的 SQL 命令

SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

 

1. SELECT 语句

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

格式:

SELECT column1_name,column2_name FROM table_name;
SELECT * FROM table_name;

举例:

SELECT name,country FROM Websites; //从"Websites"表中选取name和country列
SELECT * FROM Websites; //从Websites表中选取所有列
SELECT * FROM Persons WHERE ROWNUM <=5; //从Persons表中选择前5列数据
SELECT * FROM Websites LIMIT 2; //只选出Websites表中所有列的前2行
SELECT TOP 50 PERCENT * FROM Websites; //选出Websites表中所有列的前50%的数据
select top 5 * from table;    //选出表table的前5行
select top 5 * from table order by id desc //选出表table的后5行,desc表示降序排列,asc表示升序
SELECT DISTINCT country FROM Websites; //选出country列,重复相同的内容舍去。

MySQL 支持 LIMIT 语句来选取指定的条数数据

 

2. WHERE

WHERE子句用于过滤记录,提取那些满足指定条件的记录。

格式:

SELECT column1_name,column2_name
FROM table_name
WHERE column1_name operator value;

例子:

SELECT * FROM Websites WHERE country='CN'; //选中所有的列,选中country=‘CN’的行
SELECT * FROM Websites WHERE id=1; //选中所有的列,选中id列中值为1的行

WHERE 子句中的运算符:
= 等于
<> 不等于。注意,在SQL的一些版本中,也可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式,进行模糊查询
IN 指定针对某个列的多个可能值

逻辑运算的优先级:()  not  and  or

例子:

select * from emp where ename='SMITH'; //选中ename列为'SMITH'的行
select * from emp where sal > 2000 and sal < 3000; //选中sal列中的值在2000~3000之间的行
Select * from emp where sal between 2000 and 3000; //选中sal列中的值在2000~3000之间的行
select * from emp where sal > 2000 or comm > 500; //选中sal列中的值大于2000 或 comm 列中值大于500的行
select * from emp where not sal > 1500; //选中sal列中不大于1500的行
select * from emp where comm is null; //判断为空的列
Select * from emp where sal in (5000,3000,1500); //查询EMP表sal列中等于5000,3000,1500的行。
select * from emp where ename like 'M%'; 
/*
查询emp表中ename列中有M的值的行,M为要查询内容中的模糊信息。
% 表示多个字值,_ 下划线表示一个字符,
M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
%M% : 表示查询包含M的所有内容。
%M_ : 表示查询以M在倒数第二位的所有内容。
*/

注意:where预计只能select imei,不能select imei as imei, 这个是group关键字的。

 

3. AND & OR 运算符

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

实例:

SELECT * FROM Websites
WHERE alexa > 15
AND (country='CN' OR country='USA'); //sql中‘=’是等号

 

4. ORDER BY 关键字

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

格式:

SELECT column1_name,column2_name
FROM table_name
ORDER BY column1_name,column2_name ASC|DESC;

实例:

SELECT * FROM Websites
ORDER BY alexa;    //默认是升序排列

SELECT * FROM Websites
ORDER BY alexa DESC; //使用降序排列

SELECT * FROM Websites
ORDER BY country,alexa; //按多列进行排序,首先会按country排序,在此基础上再按alexa排序

 

5. INSERT INTO 语句

INSERT INTO 语句用于向表中插入新记录。

格式:

INSERT INTO table_name
VALUES (value1,value2,value3,...); //不指定插入数据的列名,只提供插入的值。

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...); //需要指定列名及被插入的值。

实例:

INSERT INTO Websites (name, url, alexa, country)
VALUES ('百度','https://www.baidu.com/','4','CN'); //这里没有指定第一列的id,但是id会自动化变化

insert into selectselect into from 的区别
insert into table1 select * from table2 where neza='abc' //将表2的neza列为'abc'的行插入到表1中,要求表table1必须存在
select * into table1 from table2 where neza='abc' //将表2的neza列为'abc'的行插入到表1中,要求表table1不存在

 

6. SQL UPDATE 语句

UPDATE 语句用于更新表中的记录。

格式:

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value; //WHERE子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

 

7. SQL DELETE 语句

DELETE 语句用于删除表中的行。

格式:

DELETE FROM table_name
WHERE some_column=some_value; //WHERE子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

删除所有的数据:

DELETE FROM table_name;
或
DELETE * FROM table_name; //删除记录时要格外小心,因为不能重来!

 

8.distinct 关键字

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。

select distinct name from A

select distinct name,id from A : 实际上是根据“name+id”来去重,distinct同时作用在了name和id上,这种方式Access和SQL Server同时支持。

select count(distinct imei) from A;   --表中imei去重后的数目, SQL Server支持,而Access不支持
select count(distinct name, id) from A;  --SQL Server和Access都不支持

9. nvl函数

NVL(expr1, expr2) //如果oracle第一个参数为空(NULL)那么返回第二个参数的值,如果第一个参数的值不为空(NULL),则返回第一个参数的值。

NVL2(expr1, expr2, expr3) //如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。

 

五、补充

and android_version like '8%' --前缀9为P,前缀8为O,模糊匹配Android版本

SQL标准中字符串是使用单引号而不是双引号。

 

参考:https://www.runoob.com/sql/sql-delete.html

 

posted on 2019-08-15 02:22  Hello-World3  阅读(506)  评论(0编辑  收藏  举报

导航