基础语句练习:
IF(expr1,expr2,expr3):既可以作为表达式用,也可在存储过程中作为流程控制语句使用
语法:如果 expr1 是TRUE 则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
WHERE :用于提取那些满足指定标准的记录,类似语言中的if
SET:对已经定义的变量赋值的方式,经常与update语句一起使用
语法:UPDATE 表名 SET 列名 = 新值 WHERE 列名称 = 某值
left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录 ,类似的还有right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录,inner join(等值连接) 只返回两个表中联结字段相等的行
- mysql实战三:交换工资
创建一个salary表,如下所示:
create table salary(
-> id INT NOT NULL AUTO_INCREMENT,
-> name VARCHAR(100) NOT NULL,
-> sex VARCHAR(100)NOT NULL,
-> salary INT NOT NULL,
-> PRIMARY KEY (id)
-> )ENGINE = InnoDB DEFAULT CHARSET =utf8;
注:箭头(->)只是提示符
插入数据:
要求:交换所有的f和m的值,并使用一个更新查询语句,且没有中间表.
语句如下:
Update salary set sex = if (sex=’m’,’f’,’m’);
结果如图:可以看到f和m已经交换而其他没有改变
- mysql实战四:组合两张表
在数据库中创建表1和表2,并各插入三行数据,示例如下:
表1:
create table Person(
->Personid int not null,
->FirstName VARCHAR(255) NOT NULL,
->LasrName VARCHAR(255) NOT NULL,
->PRIMARY KEY(Personid)
->)ENGINE = InnoDB DEFAULT CHARSET =UTF8;
插入三组数据后:
表2:
create table Address(
->Addressid INT,
->Personid INT NOT NULL,
->City VARCHAR(255) NOT NULL,
->State VARCHAR(255) NOT NULL,
->PRIMARY KEY(Addressid)
->)ENGINE = InnoDB DEFAULT CHARSET =UTF8;
插入三组收据后:
要求:无论person是否有地址信息,都需要基于上述两表提供person的以下信息:FirstName, LastName, City,State
代码如下:
mysql> select person.FirstName,person.LasrName,address.City,address.State
-> from person left join address on person.Personid=address.Personid;
注:我的lastName前面写成了lasrName
结果如下:可以看到下面的表显示FirstName,LastName, City,State
- mysql实战五:删除重复的邮箱
编写一个sql查询,来删除email表中所有重复的电子邮箱,且删除的邮箱只保留id最小的那个.
email表如下:
代码如下:
delete t1 from email t1, email t2 where t1.Email=t2.Email AND t1.Id>t2.Id;
结果如下: