一、复习
1.复杂查询
2.聚合查询/分组查询
COUNT(*)/SUM()/AVG()/MAX()/MIN()
GROUP BY
YEAR()/MONTH()
3.子查询
多个SQL语句,一个SQL语句的结果作为另一个SQL语句的条件
4.多表查询
SELECT ename,dname FROM emp,dept WHERE deptId=did;
内连接 表1 INNER JOIN 表2 ON…
左外连接 表1 LEFT OUTER JOIN 表2 ON…
右外连接 表1 RIGHT OUTER JOIN 表2 ON…
全连接 UNION/UNION ALL
5. JS
var x; //undefined
x=1;
var x,y,z=3;
const pi=3.14;
6.学习一门编程语言的基本步骤
(1)了解背景知识:历史、现状、特点、应用场景
(2)搭建开发环境:编写hello world
(3)变量和常量
(4)数据类型
(5)运算符
(6)逻辑结构
(7)通用小程序
(8)函数和对象
(9)第三方库、框架
(10)实用的项目
二、JS数据类型和运算符
1.数据类型
分为原始类型和引用类型
原始类型分为数值型、字符串型、布尔型、未定义型(undefined)、null
(1)数值型
分为整型和浮点型
整型在内存占4个字节,浮点型占8个字节
整型分为8进制(0开头)、10进制、16进制(0x开头)
浮点型分为指数型和普通
2.147e9
(2)字符串类型
数据被引号所包含就是字符串类型,不区分单双引号。
查看某一个字符的Unicode编码
't'.charCodeAt()
(3)布尔型
在程序中表示真或者假
true/false
常用于一些是否的结果
isVip、 isOnsale、isLogin
(4)未定义型
声明了一个变量,未赋值结果是undefined
(5)空(null)
用于引用数据类型
var person=null;
console.log(typeof(person)); //输出object
检测数据类型
typeof()
number/string/boolean/undefined/object
2.数据类型转换
(1)隐式转换
①数字+字符串:数字转成字符串 number -> string
1+'a' // '1a'
②数字+布尔型:布尔型转成数字 true ->1 false -> 0 bool->number
1+true //2
1+false //1
③字符串+布尔型:布尔型转成字符串 bool -> string
'a'+true // 'atrue'
④null的加法
1+null //1 null->0
true+null //1 true->1 null->0
'a'+null //'anull' null->'null'
⑤undefined的加法
1+undefined //NAN -> Not a Number
true+undefined //NAN
'a'+undefined //aundefined
练习:
var num1=3,num2=true,num3='hello';
console.log(num1+num2+num3); //'4hello'
console.log(num2+num3+num1);//'truehello3'
console.log(num3+num1+num2);//'hello3true'
- * / 执行运算
尝试将符号两端的数据转成数值型(自动调用Number转换),如果无法转换,返回NaN(Not a Number)
总结:加号的作用
①执行加法运算;②执行字符串的拼接。
(2)强制转换
①将数据转成数值型
Number( )
将任意的数据转换成数值型,如果被转换的字符串中含有非数字,则返回NaN;布尔型会转成数值型。
②将数据转换成整型
parseInt( ) // 强制转换——向下取整
parseInt('1.5') // 1
查看数据的开始是否为数字,遇到非数字则返回前边的数字。
如果开头是非数字,则返回 NaN
练习:将以下数据转成整型 ‘3.5’, ’7a’, ’a2’
console.log(parseInt('3.5')); //3
console.log(parseInt('7a')); //7 遇到a是非数字停止
console.log(parseInt('a2')); //NaN
③将数据转成浮点型
parseFloat()
练习:'1.5a' '7.1a' 'a2.3'
返回 1.5 、 7.1 、 NaN //同上遇到非数字停止
④将数据转换成字符串
toString()
var pi=3.14;
pi.toString()
3.运算符和表达式
由运算符连接的操作数据,所组成的形式称为表达式
(1)算术运算符
+ - * / % ++ --
% 取余
++ 自增,在原来的基础之上加1
-- 自减,在原来的基础之上减1
console.log(a++) 先打印a的值,然后再自增
console.log(++a) 先自增,然后再打印a的值
练习1:
var a=3;
console.log(a++ + ++a);
a++先获取a的值(3),执行自增;
++a先让a执行自增(5),然后再获取a
练习2:
var b=5;
console.log(--b + b--);
--b 先让b执行自减(4),获取b的值(4)
b-- 先获取b的值(4), 然后执行自减
(2)比较运算符
>= <= > < ==(等于) != ===(全等于) !==
返回的结果是布尔型的值
== 只是比较两个数据的值是否相同
=== 不仅比较数据的值,还比较两个数据的类型是否相同
1° 数字和字符串比较
3>'10' //flase
数字和字符串比较,字符串转成数值型,自动调用Number转换成数字,如果字符串出现非数字折返回NaN。
3>'10a' //false
3<'10a' //false
3=='10a'//false
NaN和任何的数字比较(> < >= <= == ===)返回false;
NaN==NaN //返回false
NaN!=NaN //true
3>true //true Number(true)->1
2°字符串和字符串比较
'3'>'10' //true
两个字符串比较,比较的是Unicode码 首先比较首个字符的Unicode编0码
3->51 1->49
(3)逻辑运算符
|| 或者 && 并且 非 !
|| 关联的两个条件只需要满足其一,结果就是true,否则false
&& 关联的两个条件都满足,结果是true,否则false
! 取反
逻辑短路
|| 当第一个条件为true的时候,就不需要执行第二个条件
&& 当第一个条件为false的时候,就不需要执行第二个条件
练习:下边的代码是否会报错
var a=3;
a>5 && console.log(ename); #不报错
a<1 || console.log(ename); #报错
(4)位运算符
将数据转成二进制然后执行运算
1 10 11 100 101 110 111 1000 1001...10000
2 4 8 16
101101=100000+1000+100+1
32 + 8 + 4 +1
56 = 32 + 16 + 8
100000 + 10000 + 1000 = 111000
按位与(&) 上下两位都是1,结果是1,否则是0
按位或(|) 上下两位含有1,结果是1,否则是0
按位异或(^) 上下两位相同是0,不同是1
按位右移(>>) 删除二进制的最后n位,大概变小到原来一半
按位左移(<<) 在二进制的最后添加0,变大到原来一倍
练习: 5&9=1 8|10=10 6^12=10
0101 1000 0110
1001 1010 1100
————————————————————————————
0001 1010 1010
(5)赋值运算符
= += -= *= /= %=
在原来的基础之上进行加减乘除取余
x+=3;
课后任务:
(1)复习今天内容,整理思维导图
(2)练习:
声明一个变量保存年份,如果是闰年,打印“是闰年”(逻辑短路)
闰年标准:4年一个闰年(能被4整除),并且不能100整除;或者能被400整除
var year=2020;
((year%4==0 && year%100!=0)||year%400==0)&&console.log('是闰年' );
(3)预习逻辑结构(if if-else if-else 嵌套)