SQL 笔记
选择指定列:
select name,age from user; //选择name列和age列
返回不重复的值:
select distinct imgname from bk_img;
where 条件,特殊条件:
1.is null (空值判断)
select * from database where name is null;
2.between and (在 之间的值)
select * from database where sal between 1500 and 3000; //sal列中大于1500小于3000的值,包括1500和3000
3.In
select * from database where sal in (5000,1500,3000) //sal列中等于5000,1500,3000的值
4.like 模糊查询
select * from database where emname like 'M%';
% 表示多个字值
M% 为通配符,正则表达式,表示的意思是模糊查询信息为 M 开头的
%M% 表示查询包含 M 的所有内容
%M_ 表示查询以M在倒数第二位的所有内容
%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
5.不带比较运算符的 WHERE 子句:
WHERE 子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当 0 时转化为 false,1 转化为 true。例如:
SELECT studentNO FROM student WHERE 0
则会返回一个空集,因为每一行记录 WHERE 都返回 false。
SELECT studentNO FROM student WHERE 1
返回 student 表所有行中 studentNO 列的值。因为每一行记录 WHERE 都返回 true。
order by 关键字排序:
select * from database order by time desc; //按照 time 进行降序排序,desc 降序,asc升序;
order by 多列:
select * from database order by create_time,updata_time desc; // 多列排序
指定多列排序的排序顺序:
order by A,B 这个时候都是默认按升序排列
order by A desc,B 这个时候 A 降序,B 升序排列
order by A ,B desc 这个时候 A 升序,B 降序排列
inert into 插入数据:
insert into select 和select into from 的区别:
insert into scorebak select * from socre where neza='neza' --插入一行,要求表scorebak 必须存在
select * into scorebak from score where neza='neza' --也是插入一行,要求表scorebak 不存在
update 语句:
update bk_admin set username = 'test123' where username = 'test'; //修改username 等于 test 为 test123(Where语句为必须语句,否则更新整个表!!!)
执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。
set sql_safe_updates=1; 表示开启该参数
delete 语句:
delete from bk_admin where username = 'test123'; //删除 username = test123的行
SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。
DROP:
DROP test;
删除表test,并释放空间,将test删除的一干二净。
TRUNCATE:
TRUNCATE test;
删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。
DELETE:
1、删除指定数据
删除表test中年龄等于30的且国家为US的数据
DELETE FROM test WHERE age=30 AND country='US';
2、删除整个表
仅删除表test内的所有内容,保留表的定义,不释放空间。
DELETE FROM test 或者 DELETE FROM test;
DELETE FROM test 或者 DELETE FROM test;
LIMIT 选择指定数量行数:
select * from bk_img limit 10; //选择10行
select * from bk_img limit 5,10; //第5行开始,到第10行结束
通配符:
% 通配符:
SELECT * FROM Websites WHERE url LIKE
'https%'; //以某个字符串开头的记录
'%https%'; //包含https的记录
_ 通配符:
下面的 SQL 语句选取 name 以一个任意字符开始,然后是 "oogle" 的所有客户:
SELECT * FROM Websites
WHERE name LIKE '_oogle';
_ 号表示一个任意字符,可以这样使用:'_o_g_le'
[charlist]通配符(正则表达式):
Mysql使用 REGEXP 或 NOT REGEXP 运算符来操作正则表达式
select * from Websites where name REGEXP '^[GFS]'; //查询以G、F、s 开头的记录
SQL别名:
创建别名是为了让列名称可读性更强。
列的 SQL 别名语法:
SELECT column_name AS alias_name FROM table_name;
表的 SQL 别名语法:
SELECT column_name(s) FROM table_name AS alias_name;
JOIN 连接:
select Websites.id, Websites.name, access_log.count, access_log.date
from Websites
INNER JOIN access_log
ON Websites.id = access_log.site_id;
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL OUTER JOIN:只要其中一个表中存在匹配,则返回行
UNION 操作符:
用于合并两个或者多个select语句的结果集,select 语句必须要有相同列和相似的数据类型,同时,每个select语句的列的顺序必须相同。
select country from Websites
UNION
select country from apps
order by country; //以上语句返回不同的值,会过滤重复的值。
UNION ALL 操作符:
同上UNION操作符,不同的是会返回所有的值,包括重复的值。
select country from Websites
UNION ALL
select country from apps
order by country; //以上语句返回所有的值,不会过滤重复的值。
INSERT INTO SELECT 语句:
从一个表复制数据,然后把数据复制到一个已经存在的表中,目标表的数据不收影响。
insert into Websites (name, country)
select app_name, country from apps; //复制 apps 中的 app_name 列到 Websies表中
insert into Websites (name, country)
select app_name, country from apps
where id = 1; //只复制id为一的列
CREATE语句:
CREATE DATABASE dbname; //创建一个名字为 dbname 的数据库;
CREATE TABLE userinfo
(
Id int,
username varchar(255),
password varchar(255),
address varchar(255)
); //新建一个数据表
CREATE TABLE 约束:
NO NULL:不能为空 //id int NO NULL
UNIQUE:唯一性。
Mysql写法:
CREATE TABLE tb2(
id int no null,
name varchar(255) no null,
UNIQUE(id)
);
PRIMARY KEY 主键:
每一个表都应该有主键,并且每个表只能有一个主键。
新建表时创建主键:
CREATE TABLE tb2
(
id int NOT NULL,
username varchar(255),
password varchar(255),
PRIMARY KEY (id) //设置id为主键
);
当表已经创建时创建主键:
ALTER TABLE tb2
ADD PRIMARY KEY (id);
撤销主键:
Mysql:
ALTER TABLE tb2
DROP PRIMARY KEY;
FOREIGN KEY 约束:
外键约束。防止非法插入数据。
新建表时设置外键:
CREATE TABLE order
(
O_id int NOT NULL,
orderno int NOT NULL,
P_id int,
PRIMARY KEY (O_id), // O_id 为主键键
FOREIGN KEY (P_id) REFERENCES persons(P_id) // P_id 为 persons 表的P_id
);
当表已经存在时设置外键:
ALER TABLE order
ADD FOREIGN KEY (P_id)
REFERENCES persons (P_id);
撤销 FOREIGN KEY 约束:
Mysql:
ALTER TABLE Order
DROP FOREIGN KEY persons;
CHECK 约束:
用于限制列中的值得范围。
如果对单个列定义CHECK约束,那么该列只允许特定的值。
表定义 ,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
新建表时 CHECK 约束:
CREATE TABLE user
(
id int NOT NULL,
username varchar(255),
password varchar(255),
CHECK (username > 0) //限制 username字段 大于 0
)
多个列的 CHECK 约束:
CHECK (username > 1 AND password > 0); 限制 username 字段大于1 和 password 字段大于0
当表已经存在时 CHECK 约束:
Mysql:
ALTER TABLE user
ADD CHECK (username > 0);
撤销 CHECK 约束:
ALTER TABLE user
DROP CONSTRAINT username;
DEFAULT 约束:
用于向列中插入默认值,设置默认值。
新建表时设置默认值:
CREATE TABLE user
(
id int NOT NULL,
username varchar(255) NOT NULL,
password varchar(255) DEFAULT '123456' //设置 passwdord 字段的默认值为 123456
);
当表已经创建的时候设置默认值:
ALTER TABLE testdb
ALTER username SET DEFALT '123456'; //设置username字段默认值
完结