sql2

来源:互联网 发布:淘宝开放平台合作商家 编辑:程序博客网 时间:2024/05/27 03:25
1.1  BETWEEN关键字
如果我们在WHERE条件语句中,需要获取日期,数字甚至文本的两个值之间的数据,那么我们可以使用如下语句:(例子都使用SELECT语句)
SELECT 列 FROM 表名 WHERE 条件列 BETWEEN 值1 AND 值2 ;
这样将查询出条件列中值在值1与值2之间的所有数据的指定列的值。
如果需要的是值1与值2以外的,我们可以在BETWEEN前加上NOT:
SELECT 列 FROM 表名 WHERE 条件列 NOT BETWEEN 值1 AND 值2 ;
TIPS:这里大家要注意一点的就是between...and...中的边际值,在不同的数据库环境中有不同的处理。

MySQL在BETWEEN...AND中包含边界值,而NOT语句中不包含。

select id from student where id between '902'and'905';


例子:


代码:slect * from student where id between '902'and'905';

        mysql> select *from student where
    -> id between '902'and'905';
+------+--------+------+------------+------------+--------------+
| id   | name   | sex  | birth      | department | address      |
+------+--------+------+------------+------------+--------------+
|  902 | 张老二 | 男   | 1986-01-11 | 中文       | 北京市昌平区 |
|  902 | 张老二 | 男   | 1986-01-11 | 中文       | 北京市昌平区 |
|  903 | 张老三 | 男   | 1990-02-27 | 中文       | 湖北省永州市 |
|  904 | 李四   | 男   | 1990-11-09 | 英语       | 辽宁省阜新市 |
|  905 | 王五   | 女   | 1991-01-19 | 英语       | 福建省厦门市 |
+------+--------+------+------------+------------+--------------+

1.2:Alias:

Alias(别名)
所谓别名,就是为我们指定的表或列设定一个方便阅读的名字。
使用格式:表名 AS 表的别名,列名 AS 列的别名。

SELECT  表1的别名.列1 AS 列1的别名, 表2的别名.列3 AS 列3的别名 FROM 表1 AS 表1的别名, 表2 AS 表2的别名; 

例子:

mysql> select a.id as b, b.grade as c from student as a, score as b;
+------+------+
| b    | c    |
+------+------+
|  901 |   98 |
|  902 |   98 |
|  902 |   98 |
|  903 |   98 |
|  904 |   98 |
|  905 |   98 |
|  906 |   98 |
|  901 |   80 |
|  902 |   80 |
|  902 |   80 |
|  903 |   80 |
|  904 |   80 |
|  905 |   80 |
|  906 |   80 |
|  901 |   65 |
|  902 |   65 |
|  902 |   65 |
|  903 |   65 |
|  904 |   65 |

               

1.3同时查询多个表
有时候我们需要查询的值可能存在同一个表中,而我们只能有一个结果集,那么我们就可以同时查询多个表。
SELECT 表1.列1,表2.列1 FROM 表1,表2...
不过单纯使用这种方法查询,会有一点小麻烦,后面我们将设置更多的条件,用来排除这些麻烦。

例子:

mysql> select student.id, score.grade from student ,sc
+------+-------+
| id   | grade |
+------+-------+
|  901 |    98 |
|  902 |    98 |
|  902 |    98 |
|  903 |    98 |
|  904 |    98 |
|  905 |    98 |
|  906 |    98 |
|  901 |    80 |
|  902 |    80 |
|  902 |    80 |
|  903 |    80 |
|  904 |    80 |

             

1.4 JOIN关键字
通常我们一个软件的数据库中,不会只有一张表,我们要处理繁多的零散的数据,我们将数据保存于数据库中,我们使用表将数据们有序地存在一起,不过一张表显然是不          够我们使用的。正常情况下,我们的软件的数据库将维护很多张表,而表与表之间又有这一定联系,这个时候我们将会在获取数据时,同时访问多张表,并将数据返回到            一个结果集上,那么这个时候,我们可以使用两个表中相关联的字段的值,进行筛选返回的数据,
SELECT * FROM 表1,表2 WHERE 表1.id = 表2.id ;
当然我们还可以使用JOIN关键字,JOIN关键字有如下几种用法:

1.4.1:NNER JOIN
格式:
SELECT * FROM 表1 [INNER] JOIN  表2 ON 表1.id = 表2.id ;
如果表中有至少一个匹配,则返回行。


1.左右表都匹配就返回。

1.4.2:LEFT JOIN
格式:
SELECT * FROM 左表 LEFT JOIN  右表 ON 左表.id = 右表.id ;
即使右表中没有匹配,也从左表返回所有的行。


1.左表所有数据都要返回到结果集中。
2.如果右表无法匹配的左表的数据,右表用NULL进行配对。

mysql> select*from  student right join score on student.id=score.id;
+------+--------+------+------------+------------+--------------+------+--------
+-------+
| id   | name   | sex  | birth      | department | address      | id   | cource
| grade |
+------+--------+------+------------+------------+--------------+------+--------
+-------+
|  901 | 张老大 | 男   | 1985-07-22 | 计算机     | 北京市海淀区 |  901 | 计算机
|    98 |
|  901 | 张老大 | 男   | 1985-07-22 | 计算机     | 北京市海淀区 |  901 | 英语
|    80 |
|  902 | 张老二 | 男   | 1986-01-11 | 中文       | 北京市昌平区 |  902 | 计算机
|    65 |
|  902 | 张老二 | 男   | 1986-01-11 | 中文       | 北京市昌平区 |  902 | 计算机
|    65 |
|  902 | 张老二 | 男   | 1986-01-11 | 中文       | 北京市昌平区 |  902 | 中文
|    88 |
|  902 | 张老二 | 男   | 1986-01-11 | 中文       | 北京市昌平区 |  902 | 中文
|    88 |
|  903 | 张老三 | 男   | 1990-02-27 | 中文       | 湖北省永州市 |  903 | 中文
|    95 |
|  904 | 李四   | 男   | 1990-11-09 | 英语       | 辽宁省阜新市 |  904 | 计算机
|    70 |
|  904 | 李四   | 男   | 1990-11-09 | 英语       | 辽宁省阜新市 |  904 | 英语
|    92 |
|  905 | 王五   | 女   | 1991-01-19 | 英语       | 福建省厦门市 |  905 | 英语
|    94 |
|  906 | 王六   | 男   | 1988-06-23 | 计算机     | 湖南省衡阳市 |  906 | 计算机
|    90 |
|  906 | 王六   | 男   | 1988-06-23 | 计算机     | 湖南省衡阳市 |  906 | 英语
|    85 |

                          

1.4.3:

RIGHT JOIN
格式:
SELECT * FROM 左表 RIGHT JOIN  右表 ON 左表.id = 右表.id ;
即使左表中没有匹配,也从右表返回所有的行。

1.右表所有行的数据都要返回,不管是否匹配。
2.右表中无法再左表匹配的数据,左表用NULL填充。

mysql> select*from  student left join score on student.id=score.id;
+------+--------+------+------------+------------+--------------+------+--------
+-------+
| id   | name   | sex  | birth      | department | address      | id   | cource
| grade |
+------+--------+------+------------+------------+--------------+------+--------
+-------+
|  901 | 张老大 | 男   | 1985-07-22 | 计算机     | 北京市海淀区 |  901 | 计算机
|    98 |
|  901 | 张老大 | 男   | 1985-07-22 | 计算机     | 北京市海淀区 |  901 | 英语
|    80 |
|  902 | 张老二 | 男   | 1986-01-11 | 中文       | 北京市昌平区 |  902 | 计算机
|    65 |
|  902 | 张老二 | 男   | 1986-01-11 | 中文       | 北京市昌平区 |  902 | 中文
|    88 |
|  902 | 张老二 | 男   | 1986-01-11 | 中文       | 北京市昌平区 |  902 | 计算机
|    65 |
|  902 | 张老二 | 男   | 1986-01-11 | 中文       | 北京市昌平区 |  902 | 中文
|    88 |
|  903 | 张老三 | 男   | 1990-02-27 | 中文       | 湖北省永州市 |  903 | 中文
|    95 |
|  904 | 李四   | 男   | 1990-11-09 | 英语       | 辽宁省阜新市 |  904 | 计算机
|    70 |
|  904 | 李四   | 男   | 1990-11-09 | 英语       | 辽宁省阜新市 |  904 | 英语
|    92 |
|  905 | 王五   | 女   | 1991-01-19 | 英语       | 福建省厦门市 |  905 | 英语
|    94 |
|  906 | 王六   | 男   | 1988-06-23 | 计算机     | 湖南省衡阳市 |  906 | 计算机
|    90 |
|  906 | 王六   | 男   | 1988-06-23 | 计算机     | 湖南省衡阳市 |  906 | 英语

1.4.4:FULL JOIN
格式:
SELECT * FROM 表1 FULL JOIN  表2 ON 表1.id = 表2.id ;
只要其中一个表中存在匹配,就返回行。
不过只有5.1以上才能使用这个全联接功能。

1.5UNION关键字
UNION关键字,联合,用于合并两个或多个SELECT语句的结果集。
格式:
(SELECT 列 FROM 表)
UNION [ALL]
(SELECT 列 FROM 表) 

要求:    1.两次查询子句返回的结果集的列数必须一样,类型相似。
 2.union会自动去掉重复行,不想去掉就在UNION后面加上ALL。
 3.如果查询字句中没有order by,limit,可以不使用()。
 4.在联合语句的查询子句中如果要使用ORDER BY进行排序,那么必须跟上LIMIT限定,否则ORDER BY。
 5.返回结果集的字段名,是用第一个查询语句的字段名来命名。
 6.用于将两个查询逻辑完全相反的结果集合并到一起。
TIPS:本页说'两'的地方都可以换为'多'。

例子:

                          

2:SQL约束
约束用于限制介入表的数据的类型。
我们可以在建表时设定约束,或者使用ALTER TABLE语句修改。
我们将主要了解一下几种约束:
NOT NULL  (非空)UNIQUE(唯一性)
    PRIMARY KEY(主键) FOREIGN KEY(外键)  
CHECK(值限定)    DEFAULT(默认值)

2.1    NOT NULL
NOT NULL约束该字段不能接受NULL值,也就是说如果不向此字段加入数据值,就无法插入新的数据。

例:
CREATE TABLE 表名 (字段名  字段类型 NOT NULL) ;

2.2   UNIQUE约束
UNIQUE约束,用来标识这个字段的数据的唯一性。说白了就是防止重复。
例: CREATE TABLE Persons (
id int(10) NOT NULL ,
name varchar(50),
UNIQUE (id)
);

这里的例子是UNIQUE在建表语句中的使用。

2.2.1:  追加UNIQUE约束
UNIQUE约束还能使用ALTER TABLE语句加入表中,一个表中可以有多个UNIQUE指定的列:
单列
ALTER TABLE 表名 ADD UNIQUE(列) ;
多列
ALTER TABLE 表名 ADD CONSTRAINT  UNIQUE约束名 UNIQUE(列名...) ;

向已存在的表中添加唯一约束时,需要注意这一列中是否已经有重复值,如果已经有重复值,将无法添加唯一约束。

2.2.3: 删除UNIQUE约束
UNIQUE约束:ALTER TABLE 表名 DROP INDEX  UNIQUE约束名(这个如果我们只添加一列UNIQUE约束,这个约束名为那一列的字段名;添加多列的             UNIQUE约束时,这个约束名,需要我们来重命名)
TIPS:如果我们是为多列设定了一个UNIQUE约束,那么需要这多列全部重复,才会生效。

2.4:PRIMARY KEY
主键,用于约束唯一标识数据库表中的每条记录。
要求:
1.主键必须包含唯一的值(不能重复)。
2.主键不能包含NULL值(不能不填(第一次可以不填,会自动补默认值))。
3.每个表只能有一个主键。
PRIMARY KEY 主键的创建:
CREATE TABLE Person (
id int NOT NULL,
name VARCHAR(20),
PRIMARY KEY (id)
)

2.4.1:追加PRIMARY KEY约束
PRIMARY KEYE约束还能使用ALTER TABLE语句加入表中:
ALTER TABLE 表名 ADD PRIMARY KEY(列) ;
2.4.2 删除主键约束:
ALTER TABLE 表名 DROP PRIMARY KEY ; 

TIPS:当我们的要指定作为外键的字段中数据不符合外键约束时,外键添加不上。

2.5 FOREIGN KEY约束
外键约束,用来指向另一个表中的PRIMARY KEY。
外键用来预防破坏表之间连接的动作。也可以防止非法数据的插入因为外键必须是他指向的那个表的值之一。
例子:
CREATE TABLE 表名(字段1 字段类型,字段2 字段类型,FOREIGN KEY(字段2) REFERENCES  表2(表2的字段));

2.5.2 追加FOREIGN约束
FOREIGN约束还能使用ALTER TABLE语句加入表中,一个表中可以有多个FOREIGN指定的列:
ALTER TABLE 表名 ADD FOREIGN KEY(列) REFERENCES 表2(表2的列) ;
删除FOREIGN约束,需要外键约束(CONSTRAINT)
ALTER TABLE 表名 DROP FOREIGN KEY  外键约束名 ;

0 0
原创粉丝点击