Users表
id | name |
---|---|
int | varchar(128) |
Book表
id | name | user_id |
---|---|---|
int | varchar(128) | int |
SQL
一般不区分大小写。and
和or
desc
关键字。select id from users where name='李明' order by id desc,name asc
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
INSERT INTO 表名称 VALUES (值1, 值2,....)
DELETE FROM 表名称 WHERE 列名称 = 值
DML
) 和 数据定义语言 (DDL
)。SQL SERVER
:使用TOP
子句返回。MySQL
:使用limit
关键字。select * from users limit 5;//mysql 返回五条数据
select top 5 * from users;//sqlServer 返回前五条数据
select top 5 percent * from users;//sqlServer 返回前5%的数据记录
%
替代一个或多个字符_
仅替代一个字符。NOT
关键字选择没有匹配到的数据记录。[charlist]
字符列中的任何单一字符,mysql中无效[^charlist]或者[!charlist]
不在字符列中的任何单一字符,mysql中无效select * from users where name like '李%';//返回名字姓李的数据记录,姓名长度任意
select * from users where name like '李_';//返回名字姓李,且姓名长度为2的数据记录
select * from users where name not like '%李%';//返回姓名中不含李字的数据记录
select * from users where name like '[李张]%';//返回姓李或姓张的记录
select * from users where name like '[!李张]%';//返回不姓李或张的记录
select * from users where name in ('李明','张三');//返回姓名为张三和李明的数据记录。
not
关键字表示不在该区间。select * from users where name between 'Andy' and 'Woody';//返回name字段字母序在Andy和Woody之间的记录,是否返回端点边界记录根据数据库的不同而不同。
select id as '编号' from users;
至少匹配一行数据返回结果集,否则为空集
select * from users,book where users.id=book.user_id;//等同于下面的语句
select * from users inner join book where users.id=book.user_id;
+----+-------+-----+--------------------+----+------+---------+
| id | name | age | email | id | name | user_id |
+----+-------+-----+--------------------+----+------+---------+
| 1 | Jone | 18 | [email protected] | 1 | 语文 | 1 |
| 2 | Jack | 20 | [email protected] | 2 | 数学 | 2 |
| 1 | Jone | 18 | [email protected] | 3 | 英语 | 1 |
| 3 | Tom | 28 | [email protected] | 4 | 地理 | 3 |
| 4 | Sandy | 21 | [email protected] | 5 | 事务 | 4 |
| 3 | Tom | 28 | [email protected] | 6 | 生物 | 3 |
+----+-------+-----+--------------------+----+------+---------+
select * from users left join book on users.id=book.user_id;//返回user表的所有行,
若某行在book表中没有匹配也返回,且该行的book表内容为空或NULL。
+----+--------+-----+--------------------+------+------+---------+
| id | name | age | email | id | name | user_id |
+----+--------+-----+--------------------+------+------+---------+
| 1 | Jone | 18 | [email protected] | 1 | 语文 | 1 |
| 1 | Jone | 18 | [email protected] | 3 | 英语 | 1 |
| 2 | Jack | 20 | [email protected] | 2 | 数学 | 2 |
| 3 | Tom | 28 | [email protected] | 4 | 地理 | 3 |
| 3 | Tom | 28 | [email protected] | 6 | 生物 | 3 |
| 4 | Sandy | 21 | [email protected] | 5 | 事务 | 4 |
| 5 | Billie | 24 | [email protected] | NULL | NULL | NULL |
+----+--------+-----+--------------------+------+------+---------+
select * from users right join book on users.id=book.user_id;//与左外连接类似,若改为book right join user结果与左外连接一样
select * from users full join book on users.id=book.user_id;
id name id name user_id
----------- ---------- ----------- ---------- -----------
1 张三 1 语文 1
1 张三 2 数学 1
2 李四 3 地理 2
3 李明 4 科学 3
4 王五 5 英语 4
5 钱数据 NULL NULL NULL
6 黄河 NULL NULL NULL
SELECT
语句的结果集
UNION
内部的 SELECT
语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT
语句中的列的顺序必须相同。UNION
操作符选取不同的值。如果允许重复的值,使用 UNION ALL
,但UNION ALL
命令会列出所有的值。UNION
结果集中的列名总是等于 UNION
中第一个 SELECT
语句中的列名。select id '编号' from users union select id from book;
编号
-----------
1
2
3
4
5
6
select id '编号' from users union all select id from book;
编号
-----------
1
2
3
4
5
6
1
2
3
4
5
IN
子句可用于向另一个数据库中拷贝表。若待插入表不存在将会自动创建该表。select users.name user_name,book.name as book_name
into users_book
from users
full join book
on users.id=book.user_id;
"users_book表"
user_name book_name
---------- ----------
张三 语文
张三 数学
李四 地理
李明 科学
王五 英语
钱数据 NULL
黄河 NULL
create database 数据库名
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
constraint
not null
:不能为空。unique
:唯一约束。1. MySQL中应为unique(name),SqlServer中为name varchar(128) unique
2. 为多个列定义 UNIQUE 约束:CONSTRAINT uc_name UNIQUE (name,email)
3. 添加约束:alter table users add unique(name)
4. 添加多个约束:alter table users add constraint unc_name_email unique(name,email)
5. 删除约束:alter table users drop unique(name)
primary key
:定义主键。规则与unique约束一致:如mysql中为primary key(id);SqlServer中为id int primary key;
foreign key
:外键约束 constraint fk_useid foreign key(user_id) references Users(id)
check
:约束某列值的输入。 constraint ck_name check (name>'Andy')
表示name字段的值大于Andy
;也可(Mysql中)写为name varchhar(128) check (name>'Andy')
default
:默认值以上约束用法一致。
index索引创建:加快搜索速度,但更新时耗时长因为需要更新索引。
create index index_name on table_name(column_name)
create unique index index_name on table_name(column_name)
create index idx_name on users(name);//以name创建索引
create index idx_name_order on users(name desc);//以name降序创建索引
create index idx_name_email on users(name,email);//创建多个索引
1.删除索引
MySQL:alter table table_name drop index index_name;
SQLServer:drop index table_name.index_name;
2.删除数据库
drop database 数据库名
3.删除表
drop table 表名
4.不删除表,仅清除表中的数据
truncate table table_name;
1.创建视图
create view view_name as
select column_names from table_name;//select语句
2.查询视图
select * from view_name;
3.删除视图
drop view view_name;
MySQL本身带有user表为登录用户表
1.创建用户
create user 'user_name'@'host' identified by 'password';
//user_name:用户名 host:指定登录的ip地址 password:登录密码
create user 'user_name'@'%' //表示任意地址登陆,且未设置密码
2.授权用户
GRANT privileges ON databasename.tablename TO 'username'@'host'
GRANT ALL ON *.* TO ‘aaa’@‘%’;//表示给用户aaa授权,让aaa能给所有库所有表实行所有的权力。
//按名字分类
select users.name,count(*) as nums
from users,book
where users.id=book.user_id
group by users.name;
name nums
---------- -----------
admin 2
bbb 1
ccc 1
ddd 1
select users.name,count(*) as nums
from users,book
where users.id=book.user_id
group by users.name
having count(*)>1;
name nums
---------- -----------
admin 2
1. avg(column):返回某列的平均值。
2. min(column):返回某列最小值。
3. max(column):返回某列最大值。
4. count(column):返回某列的行数(不包括NULL值)。
5. count(*):返回被选行数。
6. count(distinct column):返回相异的记录数。(sqlserver支持)
7. sum(column):返回某列的总和。
8. first(column):返回某列的第一行数据。(可以先使用order by子句进行排序)。
9. last(column):返回某列最后一行数据。
10. mid(column_name,start,length):从列名为column_name的记录中取出第start个字开始长度为length的文本。(start起始值为1)。
11. len(column):返回文本长度。
12. round(column_name,decimals):规定小数位。
13. now():返回当前时间。
14. format(column_name,format):对文本进行格式化。如format(now(),"YYYY-MM-DD"),日期格式输出7/1/2019
Users表
id | name |
---|---|
int | varchar(128) |
Book表
id | name | user_id |
---|---|---|
int | varchar(128) | int |
SQL
一般不区分大小写。and
和or
desc
关键字。select id from users where name='李明' order by id desc,name asc
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
INSERT INTO 表名称 VALUES (值1, 值2,....)
DELETE FROM 表名称 WHERE 列名称 = 值
DML
) 和 数据定义语言 (DDL
)。SQL SERVER
:使用TOP
子句返回。MySQL
:使用limit
关键字。select * from users limit 5;//mysql 返回五条数据
select top 5 * from users;//sqlServer 返回前五条数据
select top 5 percent * from users;//sqlServer 返回前5%的数据记录
%
替代一个或多个字符_
仅替代一个字符。NOT
关键字选择没有匹配到的数据记录。[charlist]
字符列中的任何单一字符,mysql中无效[^charlist]或者[!charlist]
不在字符列中的任何单一字符,mysql中无效select * from users where name like '李%';//返回名字姓李的数据记录,姓名长度任意
select * from users where name like '李_';//返回名字姓李,且姓名长度为2的数据记录
select * from users where name not like '%李%';//返回姓名中不含李字的数据记录
select * from users where name like '[李张]%';//返回姓李或姓张的记录
select * from users where name like '[!李张]%';//返回不姓李或张的记录
select * from users where name in ('李明','张三');//返回姓名为张三和李明的数据记录。
not
关键字表示不在该区间。select * from users where name between 'Andy' and 'Woody';//返回name字段字母序在Andy和Woody之间的记录,是否返回端点边界记录根据数据库的不同而不同。
select id as '编号' from users;
至少匹配一行数据返回结果集,否则为空集
select * from users,book where users.id=book.user_id;//等同于下面的语句
select * from users inner join book where users.id=book.user_id;
+----+-------+-----+--------------------+----+------+---------+
| id | name | age | email | id | name | user_id |
+----+-------+-----+--------------------+----+------+---------+
| 1 | Jone | 18 | [email protected] | 1 | 语文 | 1 |
| 2 | Jack | 20 | [email protected] | 2 | 数学 | 2 |
| 1 | Jone | 18 | [email protected] | 3 | 英语 | 1 |
| 3 | Tom | 28 | [email protected] | 4 | 地理 | 3 |
| 4 | Sandy | 21 | [email protected] | 5 | 事务 | 4 |
| 3 | Tom | 28 | [email protected] | 6 | 生物 | 3 |
+----+-------+-----+--------------------+----+------+---------+
select * from users left join book on users.id=book.user_id;//返回user表的所有行,
若某行在book表中没有匹配也返回,且该行的book表内容为空或NULL。
+----+--------+-----+--------------------+------+------+---------+
| id | name | age | email | id | name | user_id |
+----+--------+-----+--------------------+------+------+---------+
| 1 | Jone | 18 | [email protected] | 1 | 语文 | 1 |
| 1 | Jone | 18 | [email protected] | 3 | 英语 | 1 |
| 2 | Jack | 20 | [email protected] | 2 | 数学 | 2 |
| 3 | Tom | 28 | [email protected] | 4 | 地理 | 3 |
| 3 | Tom | 28 | [email protected] | 6 | 生物 | 3 |
| 4 | Sandy | 21 | [email protected] | 5 | 事务 | 4 |
| 5 | Billie | 24 | [email protected] | NULL | NULL | NULL |
+----+--------+-----+--------------------+------+------+---------+
select * from users right join book on users.id=book.user_id;//与左外连接类似,若改为book right join user结果与左外连接一样
select * from users full join book on users.id=book.user_id;
id name id name user_id
----------- ---------- ----------- ---------- -----------
1 张三 1 语文 1
1 张三 2 数学 1
2 李四 3 地理 2
3 李明 4 科学 3
4 王五 5 英语 4
5 钱数据 NULL NULL NULL
6 黄河 NULL NULL NULL
SELECT
语句的结果集
UNION
内部的 SELECT
语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT
语句中的列的顺序必须相同。UNION
操作符选取不同的值。如果允许重复的值,使用 UNION ALL
,但UNION ALL
命令会列出所有的值。UNION
结果集中的列名总是等于 UNION
中第一个 SELECT
语句中的列名。select id '编号' from users union select id from book;
编号
-----------
1
2
3
4
5
6
select id '编号' from users union all select id from book;
编号
-----------
1
2
3
4
5
6
1
2
3
4
5
IN
子句可用于向另一个数据库中拷贝表。若待插入表不存在将会自动创建该表。select users.name user_name,book.name as book_name
into users_book
from users
full join book
on users.id=book.user_id;
"users_book表"
user_name book_name
---------- ----------
张三 语文
张三 数学
李四 地理
李明 科学
王五 英语
钱数据 NULL
黄河 NULL
create database 数据库名
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
constraint
not null
:不能为空。unique
:唯一约束。1. MySQL中应为unique(name),SqlServer中为name varchar(128) unique
2. 为多个列定义 UNIQUE 约束:CONSTRAINT uc_name UNIQUE (name,email)
3. 添加约束:alter table users add unique(name)
4. 添加多个约束:alter table users add constraint unc_name_email unique(name,email)
5. 删除约束:alter table users drop unique(name)
primary key
:定义主键。规则与unique约束一致:如mysql中为primary key(id);SqlServer中为id int primary key;
foreign key
:外键约束 constraint fk_useid foreign key(user_id) references Users(id)
check
:约束某列值的输入。 constraint ck_name check (name>'Andy')
表示name字段的值大于Andy
;也可(Mysql中)写为name varchhar(128) check (name>'Andy')
default
:默认值以上约束用法一致。
index索引创建:加快搜索速度,但更新时耗时长因为需要更新索引。
create index index_name on table_name(column_name)
create unique index index_name on table_name(column_name)
create index idx_name on users(name);//以name创建索引
create index idx_name_order on users(name desc);//以name降序创建索引
create index idx_name_email on users(name,email);//创建多个索引
1.删除索引
MySQL:alter table table_name drop index index_name;
SQLServer:drop index table_name.index_name;
2.删除数据库
drop database 数据库名
3.删除表
drop table 表名
4.不删除表,仅清除表中的数据
truncate table table_name;
1.创建视图
create view view_name as
select column_names from table_name;//select语句
2.查询视图
select * from view_name;
3.删除视图
drop view view_name;
MySQL本身带有user表为登录用户表
1.创建用户
create user 'user_name'@'host' identified by 'password';
//user_name:用户名 host:指定登录的ip地址 password:登录密码
create user 'user_name'@'%' //表示任意地址登陆,且未设置密码
2.授权用户
GRANT privileges ON databasename.tablename TO 'username'@'host'
GRANT ALL ON *.* TO ‘aaa’@‘%’;//表示给用户aaa授权,让aaa能给所有库所有表实行所有的权力。
//按名字分类
select users.name,count(*) as nums
from users,book
where users.id=book.user_id
group by users.name;
name nums
---------- -----------
admin 2
bbb 1
ccc 1
ddd 1
select users.name,count(*) as nums
from users,book
where users.id=book.user_id
group by users.name
having count(*)>1;
name nums
---------- -----------
admin 2
1. avg(column):返回某列的平均值。
2. min(column):返回某列最小值。
3. max(column):返回某列最大值。
4. count(column):返回某列的行数(不包括NULL值)。
5. count(*):返回被选行数。
6. count(distinct column):返回相异的记录数。(sqlserver支持)
7. sum(column):返回某列的总和。
8. first(column):返回某列的第一行数据。(可以先使用order by子句进行排序)。
9. last(column):返回某列最后一行数据。
10. mid(column_name,start,length):从列名为column_name的记录中取出第start个字开始长度为length的文本。(start起始值为1)。
11. len(column):返回文本长度。
12. round(column_name,decimals):规定小数位。
13. now():返回当前时间。
14. format(column_name,format):对文本进行格式化。如format(now(),"YYYY-MM-DD"),日期格式输出7/1/2019