Replace into stu values ( 2 李四)
将原来表中2对应的数据改成了李四(原来2对应的是张三)
Truncate t ;清空所有记录。
1 Select sname 姓名,sgender 性别from student 2 selectsgender, sname from student
1是左边图,2是右边图,发现1对结果重新命名了。但是2没有
查询其它数据库中的表(当前数据库在mysql要查询aaa数据库中的表)
Select sgender,sname,sagefrom aaa.stu.
或者在aaa stu上面都加单引号’aaa’.’stu’.
Select sname 姓名,ifnull(sgender,’保密’)保密from stu;
Ifnull(sgender ,‘保密’)的意思是如果sgender有数值就显示正常的数值,如果没有数值就显示为保密,效果如上图。
!=在mysql中可以表示不等于,当然不等于在mysql中还有其它表示如<>.
模糊查询
在mysql中%代表0个或者多个任意字符。
student where sname like ‘李%‘;
在student 表中姓李的所有人的信息
注意这样的查询查不出小李这样的称呼,如果想查出用 ‘%l李%’ 就可以。
在mysql中下划线-代表一个字符,一个下划线一个字符,两个下划线两个字符,如果like’__’表示查询两个字符的。
Select * from stu where sname =’李%‘;
表示在stu中查找李%这个人,注意只有like才认李%,把%当作0个或者多个字符,但是=是不认的,%就是%没有其它意思。
Select * from student where sname not like
‘李%‘;
表示不是姓李的都取出来,反向取数据。
注意%不能匹配null,即使是where name like ‘%’;也不可匹配null.
注意尾空格会干扰通配符匹配,例如,在保存nn的时候后面加了一个空格,则where name like ‘%nn’;是没有办法匹配它们,因为在nn后面有个空格,要解决这个问题的一个简单办法就是在搜索模式后附加一个%,还有使用函数去掉首尾空格。
通配符搜索的处理一般要比其它搜索花时间更加长,不要过度使用通配符,在确实需要使用通配符时,除非有必要,否则不要把它们用在搜索模式的开始出。
Between and not between and
Select * from stu where score between 60and 70;
Select * from stu where score >=60andscore<=70;
以上两个语句相等,都是想查询成绩在60-70(包含60-70)之间的数据
Between and 区间 ,一般只有时间和数字才有区间。
Not between 60 and 80; 这里表示<60 或者> 80的,不包括60和80,要注意两个的区间。
Is null not is null
select * from stu2 where sex is notnull;
注意,当空值是是is null,不是=null。
In() not in()
Select * from stu where address in(‘北京’,’文化路’);
Select * from stu where address=’北京‘,or address=‘文化路’;
列出家庭地址是北京或者文化路的
Select * from stu where address not in(‘北京’,’文化路’);
Select * from stu where address ! =’北京‘and address<>‘文化路’;
排序
Select * from stu order by score desc,gender asc;
Score降序,asc升序排列。
如果不说升降排序就是默认升序,比如order by score.
Select * from student where gender=’男’ order by score desc limit 2;
查询成绩前两名的男生信息。
Order by rand() limit 2.
随机查询两条信息。不推荐使用
Rand()函数表示0-1之间的随机小数
关系型数据库中不能把集合性函数直接用于查询,可以用子查询
比如这个是错误的
Select * from student wherescore=max(score);
子查询
Select * from student where score=(selectmax (score)from student)
或者写成Select * from student where score in (selectmax (score)from student)
把=换成in
集合性函数有
Max() min() avg() count () sum()
Select distinct name from student;
消除重复姓名
除了distinct消除重复外还有一个方法,用union
Select name,gender score from student where gender=’男’ union select name,gender,score from student where gender=’女’
这样会消除重复值,名字,性别和成绩一样的重复值。但是如果加上了唯一值id,就没有办法消除重复值了
等值查询的两种方法
1 select s.id, s.name, t.name from students, teacher t where s.tid =t.id;
2 select s.id, s.name, t.name from students join teacher t on s.id=t.id.
推荐使用第二种,因为性能比较优化,如果在大型项目中第一种还需要做优化。
笛卡尔交集查询
Select * from teacher ,student .
网友评论