sql语句
1 查询数据
查询所有数据
1 | select * from hero |
统计表中有多少条数据
1 | select count(*) from hero |
统计表中的数据,并将数据付给自定义的变量NumberOfOrders
1 | SELECT count(*) as NumberOfheros from hero |
分页查询
利用limit限制查询的条数。
1 | select * from hero limit 0,5 //显示 hero表中前5条数据 |
- limit x :就是取排序后的最开始的那x条排序。
查询结果排序
利用order by进行对结果集排序。
下面这条语句的意思是:对 reader 表中每条记录按照 id 降序排列,查询前两条数据的name值
1 | select name from reader order by id desc limit 2 |
order by xx :就是对结果集按照 xx 的升序进行排序。
desc :就是说明从大到小小排序,就是降序,大的在前面,小的在后面。
asc :与desc相反,是升序排列,sql语句默认是升序。
精确查询
通过where来定位查询数据的位置。
1 | select * from reader where reader_id=" + id + " and reader_name='" + name + "' |
模糊查询
sql查询语句分为顺序查询和模糊查询,上面的sql语句就是顺序查询。like操作符用于模糊查询,可使用 “%” 来代替0个或多个字符,使用下划线 “_” 来代替一个字符。
1 | select * from stu where name like '张%' //只要姓是张的用户都会被查询 |
合并SQL
通过Group_concat合并多个sql语句。比如对于多行的数据在一行显示。
Group_concat完整语法如下:
1 | group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) |
DISTINCT删去重复值。
多结果值进行排序,则应该使用 ORDER BY子句。 DESC 递减排序 ,默认顺序为升序(asc)。
SEPARATOR 后面跟随应该被插入结果的值中间的字符串值。默认为逗号 (‘,’)。通过指定SEPARATOR ‘’ ,你可以删除所有分隔符。
使用group_concat_max_len系统变量,你可以设置允许的最大长度。 程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
1 | SET [SESSION | GLOBAL] group_concat_max_len = val; |
若已经设置了最大长度, 则结果被截至这个最大长度。
举个例子
数据库表中的数据是这样的
id | age |
---|---|
1 | 16 |
1 | 15 |
1 | 15 |
2 | 18 |
通过group_concat可以把相同id的age值合并在一起,并且去除重复值,用;进行分割age值。
1 | SELECT id,GROUP_CONCAT(DISTINCT age SEPARATOR ';') FROM form GROUP BY id |
结果集处理后变成这样了
id | DISTINCT age SEPARATOR ‘;’ |
---|---|
1 | 15;16 |
2 | 18 |
应用场景:一本书对应多个作者时候,作者表中的多个作者可以合并到一起。
2 插入数据
向表中插入一条数据
insert into reader (column1, column2,…) values (value1, value2,…);
1 | insert into reader(reader_name,reader_password) values ('" + name + "','" +password + "'); |
3 更新数据
更新数据
1 | update reader set Address = 'Zhongshan 23', City = 'Nanjing' where LastName = 'Wilson' |
下面的\转义了 ‘ ,使其不被当做字符串的一部分
1 | sql = "update reader set reader_name= \'" + name + "\' ,reader_password=\'" + password + "\' where reader_id=" + String.valueOf(id); |
4 结合数据库表
SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
1 | book join book_in_library on book.isbn=book_in_library.isbn |
上面sql语句的意思是把book表中 isbn 列 指向 book_in_library 中 book_in_library.isbn列。通过isbn将两个表的数据项对应起来
LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。