结构化查询语言(Structured Query Language)简称SQL
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
注意
- SQL 对大小写不敏感:SELECT 与 select 是相同的。
- SQL关键字建议使用大写形式
新建一个table_user表
CREATE TABLE `table_user` (
`id` int(32) NOT NULL AUTO_INCREMENT ,
`username` varchar(32) NULL COMMENT '用户名' ,
`password` varchar(32) NULL COMMENT '密码' ,
`summary` varchar(128) NULL COMMENT '简介' ,
PRIMARY KEY (`id`)
)
;
SELECT语句
查询table_user表全部字段信息
SELECT * FROM table_user
查询table_user表中username、password两个字段信息
SELECT username,password FROM table_user
SELECT语句和WHERE子句
WHERE:条件
AND:和
OR:或
查询id=3和username=123456的
table_user表全部字段信息
SELECT * FROM table_user WHERE id=3 AND username=123456
SELECT语句与ORDER BY
ORDER BY 语句用于对结果集进行排序
ASC:升序(默认)
DESC:降序
order by userId, age desc;
//这个desc只针对前面一个字段,多个字段,先按第一个排 两个的降序排列 orderby userId desc,age desc;
查询table_user表全部字段信息根据id降序排列
SELECT * FROM table_user ORDER BY id DESC
order by 和 group by之间的使用注意事项
SELECT * FROM table_user ORDER BY id DESC GROUP BY type
SELECT * FROM table_user GROUP BY type ORDER BY id DESC
order by 是对前面所进行查询得到的结果进行排序,并不是说一定是对最后的查询结果进行排序。第一段代码是在group by 之前进行排序,明显是错的,order by 字句已经让结果只有一个记录,再对其进行分组会出现错误;而先进行分组再排序就是可以的;
SELECT DISTINCT 语句
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
查询不同的username
SELECT DISTINCT username FROM table_user;
SELECT …LIKE语句
like ‘a%’ 模糊查询
like ‘_a%’
通配符
%表示0个到多个字符
_表示一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或[!charlist] 不在字符列中的任何单一字符
模糊查询username包含r都所有数据
SELECT * FROM table_user where username LIKE 'r%'
模糊查询username中包含r、d、其中一个
SELECT * FROM table_user where username RLIKE '[rd]'
SELECT 其他
- sql 里面不等于 <>
- between … and … 在什么之间
- in(list) 查询一个list的数据
- in(12,18)
- 查询字段为null where username is null
- 分页查询 limit 1,10
SELECT * FROM table_user limit 1,10
- 别名
SELECT COUNT(*) count FROM table_user
INSERT INTO语句
INSERT INTO 语句用于向表格中插入新的行。
添加一条username=root,password=123456的数据
两种写法
INSERT INTO table_user(username,password) VALUES ('root',123456)
下面这种数据列数和参数值要对应,包括主键也要给参
如id=9
INSERT INTO table_user VALUES (9,'root',123456,11111)
否则,[Err] 1136 - Column count doesn’t match value count at row 1
此处注意两点
-
id 即主键要设自增,否则
[Err] 1364 - Field ‘id’ doesn’t have a default value -
非数字类型参数如:root 要加单引号,否则
[Err] 1054 - Unknown column ‘root’ in 'field list’
INSERT INTO SELECT 语句
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
从一个表中复制所有的列插入到另一个已存在的表中:
要求表字段一模一样
INSERT INTO table_user SELECT * FROM user2
也可以只复制希望的列插入到另一个已存在的表中:
这个比上面的灵活
INSERT INTO table_user(username) SELECT username FROM user2
SELECT INTO FROM语句
语句形式为:SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。
UPDATE语句
根据id=1修改username=root,password=123456
UPDATE table_user SET username='root', password=123456 WHERE id=1
DELETE语句
根据id=1删除一条数据
DELETE FROM table_user WHERE id=1