赞
踩
插入数据时,一次插入多条数据,比多次插入多条同样的数据消耗时间少很多。
1.全列查找:直接把一个表的所有列所有行都打印。
select * from 表名。
*叫通配符,表示一个表的所有列。
之前说数据库的表存在硬盘上,
而select * from 表名,查询的临时结果表,不是在硬盘上,而是在内存中,随着进行了输出后,数据也就被释放了。
这个表是永久存储在服务器硬盘的,当输入命令后,客户端会把命令包装成网络请求,发给服务器,服务器收到命令请求,会操作硬盘,从硬盘中读取数据,把数据包装成响应,这个响应就是查询的结果。
客户端收到响应数据后,就会临时的把数据在内存中保存起来,并在显示器上输出。
打印完毕后, 在客户端临时保存的数据也就被释放了。
select不会影响服务器保存的数据。
select 列名 ,列名 from 表名。
相比于全列查询,这种查询更高效。
查询时进行一下运算(列与列之间)
例如期望查询结果语文比实际多10分。
实际表中的数据不会变。
我们也可以查询总分。
下面decimal(3,1)中的三代表数据有效数字为3,但是上面加完后的有效数字不等于3也是可以的。
临时表类型会自动适应,保证结果准确性。
通过指定别名,避免得到的临时表名字比较乱。
如果针对多列去重,那么两个对象,这俩列都相同才会去掉。
根据临时表排序,磁盘上的数据不变。
select 列名 from 表名 order by 列名 asc/desc (asc是升序,desc是降序)
"*"代表全部列。asc不写,默认是升序。NULL代表最小。
我们也可以用总分进行升序排序。
也可以取别名排序。
排序时也可以通过order by来指定多个列进行排序。
先根据第一列排,第一列相同,按第二列排序。
先按数学排,数学相同按语文排。
如果不指定多个列,只有指定一个列,如果结果相同,彼此之间的顺序都是不可预期的。
select 列名 from 表名 where 条件;
NULL=NULL结果是NULL,会视为假,条件不成立,所以不能这样判断是不是空。
<=>也是比较相等,只是用它比较空值,结果为真。
下面是同一个人比较。
然而下面的会报错。
where语句不能使用别名
查询语句,要查询的列和where后面访问的列是没什么关联的。
下面是个查询的例子
下面是寻找数学大于80或者英语大于80的。
表达式里如果有and和or,先计算and,后计算or,如果想打破优先级 就加括号。
下面例子中,孟德英语小于70,画横线的条件不成立,但是因为和or是或的关系,他chinese大于80条件成立,所以孟德也会打印。
然后下面这个因为和english>70是与的关系,所以没有孟德。
下面这两个效果一样。
between and是左闭右闭的。
in代表是其中的值就为真。
like指令是模糊匹配,搭配统配符使用。
只要对方描述的字符串符合你描述的这个形式就行。
%代表任意个任意字符,也包含0个字符。
_代表任意一个字符。
下面演示一下。
下面这个是全部数据
下面测试一下。
模拟匹配其实是指定一个规则,但凡符合这个规则的字符串都会被筛选出来。
%张%代表张前面可以有任意字符,后面也能有任意字符。
如果抛开SQL,站在更广的角度看通配符体系的话,编程中还有一个对象叫"正则表达式",提供了更多的特殊符号,来描述一个字符串规则。
正则表达式里面特殊符号太多,可读性太差。
因为和NULL=NULL为假,所以即使是NULL,条件也会是假。
下面这样,一页就只展示3个数据了。
获取下一页可以下面这样做。
offset 0,还是前3条。
offert 几代表向后移动几个。
移多后就变空了。
下面是输出成绩前3高的指令。
select * from 表名,对于生产环境的数据库来说, 非常危险~
~危险不危险,看的是返回结果的数据量是多还是少~
~ 返回的数据量少,其实就还好.返回的数据量多,就比较危险~
如何才能让 sql 不那么危险?
1.限制更严格的条件where
2.使用 limit 更稳妥的限制.
把select换成update
update是会修改数据库磁盘数据的
where后面的条件就直接决定了多少个记录受到了影响。
没有直接的撤销操作。
如果出现下面错误,说明数据超出类型范围了。比如说用decimal(3,1),成绩超出100,有效数字就会变为4位,就会出错。
这里只改了2个,是因为张三丰是NULL,加30不会变。
show warnings可以查看警告具体信息。
delete from 表名 where 条件 是删除操作。delete是只删除表数据。
drop table是表和数据都没有了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。