数据库专攻总结 完结(第三天)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库专攻总结 完结(第三天)相关的知识,希望对你有一定的参考价值。
create table student(
id int(3) auto_incrememt primary key not null,
name varchar(10) default null,
sex char(1) default null,
cardid varchar(20) default null,
birthday datatime default null,
email varchar(40) default null,
class varchar(20) default null,
entertime datetime default null
)engine=innodb default charset=utf8;
create table tsubject(
subjectid nvarchar(10),
subname nvarchar(30),
bookename nvarchar(30),
publiser nvarchar()20
)engine=innodb default charset=utf8;
create table score(
studentid nvarchar(15),
subjectid nvarchar(10),
make decimal
)engine=innodb default charset=utf8;
sql查询语句
1.查询所有字段
select * from 表;
2.查询指定字段
select 字段 from 表;
3.查询指定记录
select 字段 from 表 where 限定内容;
4.带in关键字的查询
select * from 表 where left(sname,1) in (‘王‘,‘李‘);
5.带betweed and 的范围查询
select * from 表 where convert(studentid,singned) between 100 and 150;
6.带like的字符串匹配查询
白根号通配符‘%’匹配任意长度的字符,甚至包括零字符
下划线通配符‘_’一次只能匹配任意一个字符
select * from 表 where sname like ‘_志_‘;
select * from 表 where sname like ‘%志%‘;
7.查询空值
select * from 表 where 字段 is null;
8.带and 的多条件查询
9.带or的多条件查询
10.查询结果不重复
select distinct 列 from 表;
11.用limit 限制查询行数
直接在查询命令后加上limit 数字;
可以加两个数字 从第几个开始 查多少行
12.把查询结果合并
利用union关键字
select 列 from 表 where 条件 union select 列 from 表 where 条件
(列要一样)
1.为表取别名
select 表名 as 表别名;
2.为字段取别名
select 列名 as 列别名;
多表连接查询
1.内连接查询
select a.*,b.* from 表1 a join 表2 b on a.列id=b.列id;
2.外连接
左连接 右连接
right join left join
3.自连接
select a.*,b.* from 表1 a full join 表2 b on a.列id=b.列id;
对查询结果排序
order by
asc 从小到大
desc 从大到小
分组查询
是对数据按照某个或多个字段进行分组
集合函数查询
count()次数
select class,count(*) from 表 group by class;
sum()和
select sum(mark) from 表;
avg()平均值
max()最大
min()最小
子查询
where型的子查询
where型的子查询就是把内层查询的结果当作外层查询的条件。
给定表如下:
create table article(
article_id int(3),
article_title varchar(50),
article_content text,
article_comments int(3),
articlecategory_id int(3)
);
insert into article values(1,"fff1","contteee",55,1);
insert into article values(2,"fff2","conttffffffeee",15,2);
insert into article values(3,"fff3","conttdgfdfdsfeee",515,1);
insert into article values(4,"fff4","conttesdfsdfsee",505,1);
insert into article values(5,"fff5","conttesdfsdfee",545,2);
insert into article values(6,"fff6","conttesdfsee",575,2);
insert into article values(7,"fff7","conttesdfsdee",5,1);
insert into article values(8,"fff8","conttesdfsdfee",77,1);
如:select article_id,article_title,article_content from article where article_comments in (select max(article_comments) from article group by articlecategory_id);
from子查询
from子查询就是把子查询的结果(内存里的一张表)当作一张临时表,然后再对它进行处理。
from子查询解决上面问题
如:select tmp.article_id,tmp.article_content,article_comments from ( select * from article order by articlecategory_id,article_comments desc ) as tmp group by tmp.articlecategory_id;
exists子查询
定义:exists子查询就是对外层表进行循环,再对内表进行内层查询。和in ()差不多,但是它们还是有区别的。主要是看两个张表大小差的程度。
若子查询表大则用exists(内层索引),子查询表小则用in(外层索引);
模式 描述
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n‘ 或 ‘\r‘ 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n‘ 或 ‘\r‘ 之前的位置。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 ‘\n‘ 在内的任何字符,请使用象 ‘[.\n]‘ 的模式。
[...] 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]‘ 可以匹配 "plain" 中的 ‘a‘。
[^...] 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]‘ 可以匹配 "plain" 中的‘p‘。
p1|p2|p3 匹配 p1 或 p2 或 p3。例如,‘z|food‘ 能匹配 "z" 或 "food"。‘(z|f)ood‘ 则匹配 "zood" 或 "food"。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,‘zo+‘ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}‘ 不能匹配 "Bob" 中的 ‘o‘,但是能匹配 "food" 中的两个 o。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
实例
了解以上的正则需求后,我们就可以更加自己的需求来编写带有正则表达式的SQL语句。以下我们将列出几个小实例(表名:person_tbl )来加深我们的理解:
查找name字段中以‘st‘为开头的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘^st‘;
查找name字段中以‘ok‘为结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘ok$‘;
查找name字段中包含‘mar‘字符串的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘mar‘;
查找name字段中以元音字符开头或以‘ok‘字符串结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘^[aeiou]|ok$‘;
本文出自 “大李子” 博客,谢绝转载!
以上是关于数据库专攻总结 完结(第三天)的主要内容,如果未能解决你的问题,请参考以下文章