Sql学习笔记
http://www.runoob.com/sql/sql-syntax.html
(1)、 使用单引号环绕文本值(大部分数据库也接受双引号)
若果是数值则不需要引号。
(2)、
数据库样表
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
1、 sql 中不用区分大小写
2、一些最重要的 SQL 命令
select- 从数据库中提取数据
update - 更新数据库中的数据
delete - 从数据库中删除数据
insert into - 向数据库中插入新数据
create database - 创建新数据库
alter database - 修改数据库
create table - 创建新表
alter table - 变更(改变)数据库表
drop table - 删除表
create index - 创建索引(搜索键)
drop index - 删除索引
3、 Select语句
select 列名 from 表
a)
SELECT column_name,column_name
FROM table_name;
4、 select distinct 语句
查询某列中的值,并且去掉重复的
SELECT DISTINCT column_name,column_name FROM table_name;
5、 where
Select 字段 , 字段 from 表 where 字段 运算符 值
SELECT * FROM Websites WHERE country='CN';
特殊:
1、空值判断 is null
·Select * from table_student where age is null;
2、在什么之间 between and
Select * from table_student where age between 20 and 30;
3、指定几个满足的值 in
Select * from table_student where age in (20,25,27);
4、 模糊查询/通配符 like
Select * from table_student where name like ‘张%’
查询表中姓名以张开始的所有记录
% 表示后面可有0个一个或者多个字符
_ 下划线表示有且只有一个字符
例如 ‘张_’ 表示选取名字是两个字且姓张的记录
%天% 表示名字中包含天字即可, 刘天,刘天一,天一
Like可以与not连用,选取不符合的,……not like……
**********
Where 后面带其他的, 一律0转化为false,其他的都是true
6、 and or
Select * from table_student where name=’hhaa’ and age=20;
结合and or
Select * from table_student where age>20 and(name=’haha’or name=’xiaoxiaoyao’)
7、order by
asc升序(默认) desc降序
用于对结果集进行排序。
select * from xxy where age>6 order by age desc
(在xxy表中在年龄大于6的结果集中按照年龄降序排列)
多列排序:
Order by age , salary;
(先按照age排序,遇到一样的再来比较salary)
8、插入 insert into
1、普通插入:(按照表的结构插入)
inert into table_student values(值1,值2,……)
2、插入指定数据: (指定有效的列)
Insert into table_student(name,age,hobby) values(……)
3、一次插入多条数据
insert into 表名(字段1,字段2,字段3) values(值01,值02,值03),(值11,值12,值13);
9、更新 update tableName
在没有where时候,更新要慎重
10、删除
1、Delete 删除表中的记录
Delete from 表 where 列 操作符 值
2、drop 删除表 (包括表和数据删得一干二净)
drop 表名
3、 truncate (删光内容,但是表的定义、结构还在)
Truncate 表名
11、取前***条数据
不同数据库语句不同:
1、Sql server: (top)
SELECT TOP 50 PERCENT * FROM Websites;
2、Mysql: (limit)
SELECT column_name(s)
FROM table_name
LIMIT 5;
3、Oracle: (rownum)
SELECT * FROM
Persons
WHERE ROWNUM <=5;
12、通配符
常常与模糊查询like连用
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
13、in 操作符 允许在where子句中规定多个有效值。
Select * from table where column_name in (value1,value2,、、、、、)
14、 between and
规定结果集是介于两者之间的任何值,且包括边界值(部分数据库)。
Select * from table_student where age between 5 and 20
(2)衍生出 not between
(3)带有in的between
选取alexa介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站:
SELECT * FROM Websites
WHERE (alexa BETWEEN 1 AND 20)
AND NOT country IN ('USA', 'IND');
15、别名
可以为表或列指定别名
1、列的别名
Select 列名 as 别名 from 表名
2、表的别名
Select 列名 from 表名 as 别名
多个设置别名用逗号隔开
结果集的列名会以设置的别名显示
16、连接 join
用于把两个或多个表的 行 结合起来,基于这些表的共同字段(列)。
别名与连接查询一起使用。
(1)inner join
Student表 : 学号 姓名 年龄 地址
Score 表 : 学号 课程号 成绩
左右连接区别:http://www.cnblogs.com/xiaoxiaoyao/p/8668626.html
(2)LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
左边所有的记录均与右边的进行匹配,有匹配的返回,没有匹配的将左边返回,右边对应的用null代替,总之以左边为“主体”。
(3)RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
(当然不存在一个没有姓名的学生参加考试,这里仅供区别二者需要)
(4)FULL JOIN:只要其中一个表中存在匹配,则返回行
总结:
1、inner join (等同于join)
匹配是只返回两者能够匹配上的
2、left join
匹配时左边所有的都要返回,遇到右边没有对应的用null填充
3、right join
同上 但是是,左边用null填充
4、full join
综合2和3.左右都返回,那一侧没有就用null填充。
17、union
Union用于合并两个或者多个select语句的结果集
18、select into
19、 insert into select
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
20、创建数据库
Create database 数据名;
21、创建表
22、约束
例如 not null 、foreign key 等就可以看做是约束
直接写在上面创建的 datatype 后面
23、select top
SELECT TOP 子句用于规定要返回的记录的数目。
SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。
注释:并非所有的数据库系统都支持 SELECT TOP 子句。
24、通配符
4中也有通配符
(1)[abc] : 代表a或b或c
[a-h] : 代表a到 h
25、主键 primary key
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
26、外键 frieign key
一个表中的 FOREIGN KEY 指向另一个表中的 “PRIMARY KEY”
``````
27、check约束
用于限制列中的值的范围
28、default 约束
用于向列中插入默认值
如果在insert的时候没有规定值,那么就是默认值
格式 : 直接在建表时的类型后面加
City varchar(255) DEFAULT '武汉'
29、create index
用于在表中创建索引、
(暂不理解)
30、alter 语句
用于在已经存在的表中添加、删除、修改列
··
例如
修改 :
goods表中的price的类型为int(原来是varchar(20))
alter table goods
alter column price int
删除 :
Alter table goods
Alter column price
31、auto increment
自动增长
例如当有新纪录插入表中时候,我们通常希望序号+1,
定义了auto increment后,在插入的时候就不用再定义值了!
默认的初始值是1,每次增加1,要想改变初始值
Alter table 表名 auto_increment=100;
Oracle中就是,先定义一个递增的序列
32、时间相关的
http://www.runoob.com/sql/sql-dates.html
33、null值
在数据库中对于可选的列,如果不写数据将会以null存下来,
Null不能与0进行比较。
使用 is null 或者 is not null 来操作。
Select * from student where address is not null、
33、常用数据类型
Varchar(n) 字符/字符串。可变长度。最大长度 n。
Char(n) 字符/字符串。固定长度n。
Boolean 布尔值 true/false
Integer 整型
Date 年月日
Time 时分秒
Timestamp 年月日时分秒
Number
34、函数
1、 AVG() - 返回平均值
SELECT AVG(column_name) FROM table_name
2、 COUNT() 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name
3、 FIRST() - 返回第一个记录的值,ORDER BY 语句对记录进行排序。
SELECT FIRST(column_name) FROM table_name
4、 LAST() - 返回最后一个记录的值
同上
5、 MAX() - MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
SELECT MAX(column_name) FROM table_name
6、 MIN() - 返回最小值
同上
7、 SUM() - 返回总和
SELECT SUM(OrderPrice) AS OrderTotal FROM Orders
8、 Group by ----根据一个或多个列对结果集进行分组,常与sum合用
9、having
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
还是8中的图
要求:现在,我们希望查找订单总金额少于 2000 的客户。
10、Ucase() lcase()
将结果转大写 小写
Select ucase(name) from student ;
11、mid( 列名,起始下标,长度) 下标从1开始
用于从结果街中选取前n个字符
例如:Select address from student;
的结果是 wuhan beijing guangzhou
那么 select mid(address,1,3) from student; (取前3个字符)
结果是: wuh bei gua
12、len()
返回文本字段中值的长度
假设对应数据为 london new york beijing
Select len(city) from person ;
结果 6 8(空格也算) 7
13、round()
用于把数值字段舍入指定的小数位数
Select round(列名,规定小数位数) from 表名;
14、now() SQL server 中用getdate()
返回当前的日期和时间
OrderDate datetime NOT NULL DEFAULT NOW(),
15、format(字段,规定格式) 格式化
用于对字段的显示进行格式化
来源:https://www.cnblogs.com/xiaoxiaoyao/p/8761531.html