笛卡尔积
结果为两表行数的乘机,可以加上条件;
1 连接
1 两表顺序没有关系:where a.id =b.id;------------------两表的交集;
2 判断有奖金的员工 id和员工员工的部门,并且员工的薪水不为空;
select empid,departid from employee e, depart d where
e.id=d.id and salary is not null
3 查询城市中第二个字母为p,的城市和部门;
select cityName,departId from city c,depart d
where c.id=d.id and cityName like ‘_p%’;
4 查询每个城市的部门数;
select count(1) from city c,depart d where
c.id=d.id
group by city;
5 查询有奖金的每个部门的部门名和领导的编号,和薪水不为null;
select name id from depart d,employee e
where d.id=e.id
and salary is not null
group by depart_id,mannager_id;
7 查询每个工种的名字和员工的个数,并且按照员工的个数进行排序;
select job_title,count(星) from employee e,job j where
e.id=j.id
group by job_title
order by count(星) desc;
2 非等值连接
查询员工的工资和工资级别;
select salary,grade_lever from employee e,job j
where salary between lowest_salary and higest_lever
and grade_lever=‘a’;
自然连接???
测试题
查询员工表的employ_id,last_name 按照部门的id降序,salary升序排列;
1 select employ_id,last_name from employee order
by depart_id desc,salary asc;
2 查询员工表的job_id中包含a和e的,并且a在e的前面;
select job_id from employee where job_id like ‘%a%e%’;
3 student表 grade 表 result表
查询姓名,年级名,成绩;
select s.name,g,name,r.score from student s,
grade g,result r
where s.id=r.student_Id
and g.id=s.grageId;
4 显示当前的日期;
去除前后的空格;
截取字符串的函数;
select now();
select trim("");
select substr(str,strIndex,length);
1 sql99语法介绍重点!!!
99年推出的标准;
2 内连接
1 查询名字中包含e的员工名和工种名
select last_name ,job_title from employee e
inner join jobs j on e.job_id =j.job_id
where e.last_name like ‘%e%’;
(where 放在on的后面)
1 常见的数据类型
数值型:整形,小数,
字符型:char varchar 短的
长的:text,blob;
日期
2 具体的整型
tinyint:无符号 0-255;
tinyint unsigned
smallint 0-65535
mediumint 有符号 ± 8388607
int 20亿
bigint:很大
int:创建table的时候默认11 位,是有符号的,可以设置unsigned位无符号;
插入的范围是由数据的类型决定的:int(6)子是代表显示的数据默认的宽度如果不够会用0进行填充,但是必须搭配zerofill进行配合;
3 浮点型和定点型
浮点精度比较高;float doble(m,d);
定点:dec(m,d);
decimal(m,d);d:是小数点后的位数;M:整数和小数的位数,如果超过,
插入临界值;
m:默认可以省略随着插入而变化;decimal中的M:默认10;
如果精度高用定点(金融运算):
精度要求不太高,为了节约存储空间用float;
选择数据类型的时候原则:越简单越好,能保存的数值的类型越小越好;
2