目录
2.每经过1秒钟,重复性的执行,产生日期时间字符串(定时器)
注:增加三目运算的目的是为了输出的时分秒是00:00:00开始的
2)通过id="pro" 所在的select标签,获取它的标签对象
5)判断选择的省份的内容是否为"陕西省"/"山西省"/"广东省"
八、学习Mysql的DDL语句(数据库的定义语句) 库的操作
5)double(几位数,小数点后保留的位数):表示小数类型数据
1)where后面跟单个条件,可以使用赋值运算符=,比较运算符<,>,<=,>=,!=
一、JavaScript
1.JavaScript注释
注释就是对代码的解释和说明。目的是为了让别人和自己很容易看懂,一看就知道这段代码是做什么用的。JavaScript的注释有两种
1)当行注释
//当行注释
快捷键:ctrl+/
2)多行注释
/*
多行注释
*/
快捷键:shift + alt + a
2.JavaScript常用的函数
1)向浏览器输出内容
document.write("HelloWprld!!");
2)可以在浏览器的控制台输出
console.log("HelloWorld!!");
3)弹出一个提示框
window.alert("HelloWorld!!");
由于window对象是浏览器内容的顶级对象,代表窗口,所以频繁使用可以不写.简写为:
alert("HelloWorld!!");
3.JavaScript的使用方法
1)行内式:可以将单行或少量js代码写在html标签的事件属性中(以on开头的属性),如:onclink
<input type="button" value="点击查询" onclick="getMonth"() />
2)内嵌式:在head标签体中指定script标签书写js的多行代码,是常用的使用方法
<script>
document.write("HelloWorld!");
console.log("HelloWorld!");
alert("HelloWorld!");
</script>
3)外部式:
1)在js文件夹中,单独创建后缀为.js的文件
2)在xxx.js文件中,书写js代码
//向浏览器打印了一个内容
document.write("hello,JavaEE2204!");
//弹一个提示框
alert("今天天气不错!") ;
//浏览器控制台打印内容
console.log("hello,JavaEE2204");
3)在当前某个html页面中,导入xxx.js文件
<script src="js/01.js"></script>;
4.JavaScript定义变量以及数据类型划分
1)定义变量在js中定义变量使用var定义.因为js是弱类型语言,所以var可以省略并且一个变量可以重复定义,但后面的值会覆盖前面的值。同时var可以定义任何数据类型
var a=10;
var a=20;//重复定义变量在js中是支持的,在Java语言中不支持
var b=3.14;
var c="HelloWorld";
var d='a';//单引号括起来的单个内容:字符
var e='abc';//虽然是单引号,但是是多个内容,浏览器解析为字符串内容
var f;
var g=new Object();//Object对象:是js内置对象的模板,提供所有js内置对象的 通用功能
var s=new String("hello");
2)数据类型划分
在js中,查看一个变量的数据类型:使用函数typeof(变量名)
1)无论是整数还是小数,都是number类型(基本类型)---自动提升为ja内置对象Number
2)无论是字符串还是字符,都是string类型(基本类型)---自动提升为String
3)underfined:未定义类型,就是定义变量没有给变量赋值(没有意义)
4)object类型(对象类型)---自动提升为Object:所有js内置对象的模板
5.JavaScript常见的运算符
运算符:针对不同的数据类型操作的
- 算术运算符:+,-,*,/,%(模,求余数)
document.write((a+b)+"<br/>") ; document.write((a-b)+"<br/>") ; document.write((a*b)+"<br/>") ; document.write((a/b)+"<br/>") ; document.write((a%b)+"<br/>") ;
- 赋值运算符:= var a=10;将=右边的值赋值给左边
//把10赋值给a var a = 10 ; //将=右边的值赋值给左边的这个变量a
- 比较运算符:>,<,>=,<=,==,!=
document.write((a>b)+"<br/>") ; document.write((a<c)+"<br/>") ; document.write((a>=b)+"<br/>") ; document.write((a<=c)+"<br/>") ; document.write((a==b)+"<br/>") ; document.write((a!=c)+"<br/>") ;
- 逻辑运算符
基本运算符:
逻辑单与 & ,有false,则false
逻辑单或 | ,有true,则true
逻辑非 !
非true,则false
非false,则true
document.write(a&b) ;
document.write((a|b) ;
document.write(!a) ;
一般情况下,开发中用的都是&&,||
逻辑双与&&:多个条件是并列关系,必须同时满足条件,有false则false
逻辑双或||:多个条件是或者的关系,有一个成立就成了,有true则true
document.write((a==b) && (a+b)==7) ;
document.write((b+c)==7 || (a==3)+"<br/>") ;
6.JavaScript流程控制语句
流程控制语句分为三大类
顺序结构语句:代码从上而下加载,比较简单
选择结构语句:
1)if语句
格式1:
if(表达式){
语句1;
}
执行流程:
先判断表达式是否成立,如果成立,如果成立才能执行语句1
格式二:开发中使用最多
if(表达式){
语句1;
}else{
语句2;
}
执行流程:
1)先判断表达式是否成立。成立,则执行语句1
2)否则不成立,执行语句2
格式三:针对多种结果判断
if(表达式){
语句1;
}else if(){
语句2;
... ...
}else{
语句n;
}
执行流程:
先判断表达式1是否成立,如果成立,执行语句1
如果不成立,继续判断表达式2是否成立,
如果成立,执行语句2,不成立,依次执行下面的语句..
如果上面都不成立,执行else中的语句n;
举例:
以判断两个数中的最大值为例
<script>
var a=30;
var b=20;
var max;
if(a>b){
max=a;
}else{
max=b;
}
document.write("最大值是:"+max);
</script>
if语句的嵌套
举例:
以三个数中的最大值为例
<script>
var n=70;
var m=80;
var z=40;
var max2;
if(m>n){
//m大
if(m>z){
max2=m;
}else{
//z大
max2=z;
}
}else{
//n大
if(n>z){
max2=n;
}else{
//z大
max2=z;
}
}
document.write("最大值是:"+max2)
</script>
2)switch语句
switch(变量){
case 值1://js中case语句后面既可以是常量,也可以是变量
语句1;
break;//结束,中断的意思
case 值2:
语句2;
break;
...
default:
语句n;
break;
}
执行流程:
1)首先判断变量的值和值1是否匹配
如果匹配,执行语句1,switch语句结束
2)如果不匹配,继续和case后面的值二进行比较,成立,则执行语句2,break结束
...
3)如果上面都不匹配,则执行语句n,switch语句结束
switch语句结束条件:
1)遇见break结束
2)程序默认执行末尾
注意:default语句可以在语句中的任何位置,但是如果在语句中,break最后别省略,否则如果case都不成立,执行default语句,会有擦色穿透现象;如果在switch语句的末尾,break可以省略
7.JavaScript事件编程的三要素
事件编程三要素
1)事件源---指的就是html标签
<body>
//写一个普通按钮
//1)input标签:事件源
<input type="button" value="点我试试"/>
</body>
2)编写事件监听器---就写一个函数(js代码) function 函数名称(形式参数名1,形式参数名2,...)
<script>
//function 函数名称(形式参数名1,形式参数名2,...){...业务逻辑...}
//2)编写一个函数,事件监听器
function myClick(){
alert("点击事件触发了...")
}
</script>
3)绑定事件监听器---就是在标签中有一些onxxx属性和函数名称进行绑定
<body>
<input type="button" value="点我试试" onclick="myClick()" />//3)绑定2)里面的函数名称
</body>
事件:
单击点击 click
双击点击 dbclick
失去焦点 blur
获取焦点 focus
选项卡发生变化的事件 change
8. JavaScript流程控制语句以及事件练习
举例:
根据输入的值,判断季节
3,4,5月 春季
6,7,8月 夏季
9,10,11月 秋季
12,1,2月 冬季
<script>
//编写事件监听器
function getMonth(){
//1)通过dom操作,获取id="month"的这个标签对象,获取它的value属性的值
var inputObj = document.getElementById("month") ;
//document.getElementById("id属性值") 固定js的dom操作语法
//获取输入框的内容
content = inputObj.value ;
// alert(content) ;
//alert(typeof(content)) ;
//完成判断
//在js 字符串==整数,它会自动会将字符串---转换成整数
if(content==3|| content==4 || content == 5){
alert("属于春季") ;
}else if(content==6|| content==7 || content == 8){
alert("属于夏季") ;
}else if(content==9|| content==10 || content == 11){
alert("属于秋季") ;
}else if(content==1|| content==2 || content == 12){
alert("属于冬季") ;
}else{
alert("对不起,属于非法数据") ;
}
}
</script>
</head>
<body>
<input type="text" id="month" placeholder="请输入月份的值" />
<!-- 1)事件源 -->
<input type="button" value="点击查询" onclick="getMonth()" />
</body>
二、JavaScript循环结构语句
循环语句的核心思想是针对重复数据操作.
分类:
1)for循环
2)While循环
3)do-while循环
1.for循环语句
for循环语句是开发中最常见的,当明确循环的次数时,多使用for循环
for循环格式:
//for循环格式:
for(初始化语句;条件表达式;控制体语句){
循环语句
}
执行流程:
1)首先初始化语句执行一次,给变量赋值
2)判断条件表达式是否成立,如果成立,就执行循环体语句
3)继续执行控制体语句(也称为"步长语句"),++或者-- 对变量自增或者自减1
4)继续判断条件表达式是否成立,如果成立,继续执行循环体语句,执行控制体语句,
...
...
5)直到条件表达式不成立,for循环结束!
举例:
1)需要在浏览器中打印五次"helloeorld"
for(var i=1;i<=5;i++){
document.write("helloworld"+"<br/>");
}
2)将1~10一一输出到浏览器上
for(var i =1; i <=10 ; i++){
document.write(i+"<br/>") ;
}
3)在控制台输出1~10之间的和
var sum = 0 ;
for(var i = 1 ; i<=10 ; i ++){
sum = sum + i ;
}
document.write("1-10之间的和是:"+sum) ;
4)求1~100之间的和
var sum2 = 0 ;
for(var i = 1 ; i <=100 ; i ++){
sum2 = sum2 + i ;
}
document.write("1-100之间的和是:"+sum2)
5)求1~100之间的偶数和
var sum3 = 0 ;
for(var i = 1 ; i <=100 ; i ++){
//加入逻辑判断
if(i % 2 ==0){
//sum3 和i进行求和,赋值给sum3
sum3 = sum3+i ;
}
}
document.write("1-100之间的偶数是:"+sum3) ;
6)求5的阶乘
var jc = 1 ;
for(var i = 1; i <=5 ; i ++){
jc*=i ; // jc = jc * i ;
//1)jc = 1 * 1 = 1
//2)i++,i=2,2<=5 , jc = 1 * 2 = 2
//3)i++,i=3,3<=5,jc = 2 * 3
//4)i++,i=4,4<=5, jc=6 * 4
//5)i++,i=5,5<=5,jc=24 * 5
//6)i++,i=6, 6<=5 ,不成立,循环结束!
}
document.write("5的阶乘是:"+jc) ;
7)for循环的应用
在浏览器中输出所有的水仙化数!
//1)明确三位数,使用for循环 100-999
for(var i = 100 ; i <=999; i++){
//确定每个位数据值
var ge = i % 10 ;
var shi = Math.floor(i/10 % 10) ;
var bai = Math.floor( i/10 /10 % 10) ;
//满足条件,i ==(ge*ge*ge+shi*shi*shi+bai*bai*bai)
if(i==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
document.write("水仙花数是:"+i+"<br/>");
}
}
2.while循环语
当不明确循环的次数的时候,使用while句
while格式
初始化语句;
while(条件表达式){
循环体语句;
控制体语句(步长语句) ;
}
初始化语句;
while(条件表达式){
循环体语句;
控制体语句(步长语句) ;
}
执行流程:
1)初始化语句对变量赋值
2)判断条件表达式是否成立,
成立,则执行循环体,一次执行步长语句;
3)再次判断条件表达式是否成立,....
..
4)条件不成立,循环结束!
举例:
1)浏览器中输出 5次"helloworld"'
var i = 1 ;
while(i<=5){
document.write("helloworld<br/>") ;
i ++ ;
}
2)求1~100之间的和
var sum = 0 ;
//初始化语句
var m = 1;
while(m<=100){
sum = sum + m ;
m ++ ;
}
document.write("1-100之间的和是:"+sum) ;
3.do-while循环语句
do-while循环语句在实际开发场景下,用的很少!
最大的特点:即使条件不成立,循环体至少执行一次!
这也是do-while和for以及while循环最大的区别:
初始化语句;
do{
循环体语句;
控制体语句(步长语句);
}while(条件表达式) ;
执行流程:
1)初始化语句对变量赋值
2)直接执行循环体语句,步长语句进行++或者--,然后执行条件是否成立
3)成立,继续执行循环体以及步长语句
...
4)条件表达式成立,不成立
举例:
1)在控制台输出 6次,"helloworld"
var x = 1;
do{
document.write("我爱高圆圆<br/>") ;
x++ ;
}while(x<=6) ;
三、JavaScript内置对象
1.JavaScript内置对象之Date
Date对象:表示当前日期对象
如何创建js内置对象之Date
1)创建日期对象
//创建日期对象
var dateStr = new Date() ;
2)获取年份getFullYear();
//getFullYear()获取当前年份
var year = dateStr.getFullYear() ;
document.write(year+"年") ;
3)获取月份:getMonth();
注意:获取的是0-11之间的整数,后面加1,(1-12月份的值)
//获取月份:getMonth()
var month = dateStr.getMonth()+1 ;
document.write(month+"月") ;
4)获取月份中的日期值 getDate()
//获取月份中的日期值 getDate() ;
var date = dateStr.getDate() ;
document.write(date+"日  ") ;
5)获取小时 getHours()
//获取小时getHours()
var hours=dateTip.getHours();
document.write(hours+":") ;
6)获取分getMinutes()
//获取分 getMinutes()
var minutes=dateTip.getMinutes();
document.write(minutes+":") ;
7)获取秒 getSeconds()
//获取秒 getSeconds()
var seconds=dateTip.getSeconds();
document.write(seconds) ;
2.补充知识
1.innerHTML和innerText属性
任何标签都有这俩个属性:
innerHTML
innerText
都表示设置标签的文本内容
如何动态给span标签或者div块标签等等添加文本内容呢?
使用dom操作
1)给标签设置id属性
通过一个固定的语法:获取id="属性值"的标签对
var 标签对象 = docuement.getElementById("id属性值") ;
2)innerHTML可以加入常用的html标签进行渲染
标签对象.innerHTML = "<h1>hello</h1>";
innerText不会渲染标签!会将标签输出浏览器中
标签对象.innerText = "设置普通文本" ,"<h1>hello</h1>",
2.每经过1秒钟,重复性的执行,产生日期时间字符串(定时器)
window对象里面setInterval(任务函数(),毫秒值) ;
window.setsetInterval("任务函数()",毫秒值) ,每经过这个毫秒值后,重复执行任务函数
window.setsetInterval("任务函数()",毫秒值)
可以省略window
.setTimeout("任务函数名称()",毫秒值);
可以应用于网页时钟
3.网页时钟练习
<script>
function myDateTip(){
//先将日期对象创建出来,获取年,月,日,时,分,秒
var dateTip=new Date();
//拼接出日期时间字符
var year=dateTip.getFullYear();
var month=dateTip.getMonth()+1;
var day=dateTip.getDate();
var hours=dateTip.getHours();
var minutes=dateTip.getMinutes();
var seconds=dateTip.getSeconds();
hours=hours<10?"0"+hours:hours;
minutes=minutes<10?"0"+minutes:minutes;
seconds=seconds<10?"0"+seconds:seconds;
var myDate=year+"-"+month+"-"+day+"  "+hours+":"+minutes+":"+seconds;
//需要将myDate这个日期时间字符串,登台添加到span标签的文本内容中
//通过"id=spantip",获取span标签对象
var span=document.getElementById("spanTip");
//设置span标签的文本内容:innerHTML
span.innerHTML="<h3>"+myDate+"</h3>"
}
//每经过1秒钟,重复性的执行,产生日期时间字符串(定时器)
window.setInterval("myDateTip()",1000);
注:增加三目运算的目的是为了输出的时分秒是00:00:00开始的
hours=hours<10?"0"+hours:hours;
minutes=minutes<10?"0"+minutes:minutes;
seconds=seconds<10?"0"+seconds:seconds;
4.JavaScript内置对象之String
js语言中,String对象,指的就是字符串数据值
创建一个js的字符串对象
var 对象名 = new String("字符串值") ;
简写为
var 对象名 = "字符串值" ;
String对象的功能是最多的
1)常用的功能charAt() 获取指定索引处的字符
2)concat(字符串):拼接功能,将原始内容和当前字符串进行拼接
没有学习这个功能之前
使用"+"进行拼接
document.write(对象名+"字符串") ;
拼接功能
document.write(对象名.concat("字符串"));
3)可以给字符串进行颜色标记 fontcolor ("颜色值(rgb(255,198,255),颜色单词..)")
document.write(对象名.fontcolor("green")) ;
4)indexOf ("字符串"):获取当前字符串中的第一次在大字符串中出现的角标值(从0开始算)
document.write(s.indexOf("owo")) ;
四、JavaScript中的函数定义以及调用
js中定义函数的格式
写法1:
function 函数名称也就是你的方法名(形式参数列表....){
完成业务代码
}
//方式1:
//定义函数
function 函数名称(形式参数列表){
//完成函数的业务逻辑
//直接输出 document.write("xxxx") ;
调用函数:
//调用函数:单独调用
函数名称(实际参数列表) ;
写法2:
//方式2: (推荐的)
//定义函数
function 函数名(形式参数列表){a,b
//完成业务逻辑操作
return 结果值;
}
赋值调用
//调用函数 赋值调用
var 结果变量 = 函数名称(实际参数列表) ;
//如果进一步的需求,继续去使用 结果变量 去其他操作!
注意事项:
1)形式参数列表中不能带var的,直接写参数名称即可
2)在定义的函数里面可以直接输出内容
var 变量= 形式参数进行运算;
直接输出结果;
或者是
在js中函数里面是可以带 return 返回一个具体的结果值;
调用的时候,赋值调用
var 结果 = 函数(实际参数) ;
举例:需要定义一个函数(方法),这个方法要进行两个数据求和
写法1
//需要定义一个函数(方法),这个方法要进行两个数据求和
//function sum(var a, var b){
function sum( a, b){
//定义变量result
var result = a+ b ;
document.write("结果是:"+result) ;
写法2
//定义两个数据求和
function sum(a,b){
//return 表示结束方法,并带给调用者一个结果;
return a+b ;
}
//赋值调用(实际开发中,它使用最多)
var myResult = sum(40,50) ;
document.write("两个数据之和是:"+myResult) ;
五.JavaScript内置对象之Array
在js中Array对象特点,跟Java中的数组不一样的,
js是一个弱类型语言,数组对象中不存在角标越界,元素可以不断扩容,而且js数组对象可以存储任何类型的元素
1.创建Array对象三种方式
方式1
var 数组对象名 = new Array() ;//不指定长度
var arr=new Array();
/*分配数组元素
数组的对象名称[索引值]=实际值; 索引值从0开始*/
arr[0]=10;
arr[1]=20;
arr[2]=30;
arr[3]=40;
//对象名.length属性:获取长度
alert(arr.length);
for(var i=0;i<arr.length;i++){
document.write(arr[i]+"<br/>");
}
方式2
var 数组对象名 = new Array(size) ;//指定数组长度
var arr=new Array(4);
/*分配数组元素
数组的对象名称[索引值]=实际值; 索引值从0开始*/
arr[0]=10;
arr[1]=20;
arr[2]=30;
arr[3]=40;
arr[4]=50;
//对象名.length属性:获取长度
alert(arr.length);
for(var i=0;i<=arr.length-1;i++){
document.write(arr[i]+"<br/>");
}
方式3
var 数组对象名 = new Array([元素1,元素2,...]) ;
//它可以简化为
var 数组对象名 = [元素1,元素2,...] ;
var arr=[10,20,30,40,50,"helloworld",'a',false,new Object()];
//对象名.length属性:获取长度
alert(arr.length);
for(var i=0;i<arr.length;i++){
document.write(arr[i]+"<br/>");
虽然可以存储任何类型,但是实际开发中,具体的元素类型肯定时统一的
不管js还是java,数组都有一个length属性:获取数组长度
六、JavaScript自定义对象的方式
1.JavaScript自定义对象的方式1
定义一个对象,格式和定义函数相同的,形式参数不能带var
//方式1:
function 对象名(形式列表...)
//定义一个对象
function 对象(属性1,属性2,属性3...){ //属性就是某个真实世界事物的特征
//给属性赋值
//给对象添加功能(方法)
}
创建对象
var 对象名 = new 对象(实际参数1,实际参数2,实际参数3....)
具体实例
1)定义一个人对象
//定义一个人对象
function Person(name,age,gender,address){//姓名,年龄,性别,住址 属性
2)给属性值
//给属性赋值
//this.属性名称 = 形式参数值;
//=号左边name:就相当于要给Person对象添加name值
this.name = name ;//=号右边name 当前形式参数里面的name
this.age = age ;
this.gender = gender ;
this.address = address;
3)给对象添加功能(方法)
//人会说英语
//this.方法名 = function(){}
this.speak = function(a){ //方法里面参数 a="英语"
alert("会说"+a) ;//弹出提示框
}
//人会玩王者荣耀
this.playGame = function(){
alert("会玩"+"王者荣耀") ;
}
4)创建一个具体的人
//创建一个具体的人:创建对象
//var 对象名 = new 对象(实际参数1,实际参数2,实际参数3....)
var p = new Person("xxx",20,"女","xxxx") ;
5)输出这个人的基本信息
//输出这个人的基本信息
//对象名.属性名 =获取内容
document.write("这个人的姓名是:"+p.name+",这个人的年龄是:"+p.age+",性别是:"+p.gender
+",住址是:"+p.address) ;
6)调用方法
//调用方法
//对象名.方法名() ;
p.speak("英语") ;
p.playGame() ;
2.JavaScript自定义对象的方式2
1)定义一个对象,不携带参数了
//定义一个对象
function Person(){
}
2)创建对象
//创建对象 人对象
var p=new Person();
3)追加属性
//自己追加属性
//对象名.追加的属性名称=实际值;
p.name="xxx";
p.age=19;
p.gender="男";
p.address="xx";
4)追加方法
//追加方法
//对象名.追加的方法名=function(空参/带参数){...}
p.speak=function(a){
alert("会说"+a);
}
p.playGame=function(b){
alert("会玩"+b);
}
5)输出这个人的基本信息
document.write("这个人的姓名是"+p.name+","+"年龄是"+p.age+","+"性别是"+p.gender+","+"住址是"+p.address);
6)调用方法
p.speak("英语");
p.playGame("王者荣耀");
3.JavaScript自定义对象的方式3
利用js内置对象:Object,代表的所有对象的模板
//利用js内置对象:Object,代表的所有对象的模板!
var 对象名 = new Object()
1)直接创建对象
//直接创建对象
var p = new Object() ;
2)追加属性
//追加属性
//对象名.属性名 = 值;
p.brand = "华为mate30pr0" ;// brand:品牌
p.price = 4699 ; //price:价格
p.color = "粉翠绿" ; //color:手机颜色
p.memory = "64G" ; //memory:手机内存
3)追加方法
//追加方法
//对象名.追加的方法名 = function(空参/带参数) {...}
//打电话
p.call = function(toName){//高圆圆
alert("这个手机给可以给"+toName+"打电话了") ;
}
//发短信
p.sendMessage = function(){
alert("可以发短信") ;
}
4)打印出手机信息
//打印出手机信息
document.write("手机品牌是:"+p.brand+",它的价格是:"+p.price+",机身颜色是:"+p.color+",它的机身内存是:"+p.memory) ;
5)调用方法
p.call("高圆圆") ;
p.sendMessage() ;
4.JavaScript自定义对象的方式4
后期经常用到(重点),json数据格式(也称为 "字面量值的方式")
json:Js对象简谱,是一种数据交互的格式(体现,前后端交互,使用json传参)
json数据解析速度非常快!
var 对象名 = {"key1":value1,"key2":value2....}
现在描述一个具体学生事物,有姓名,年龄,性别,学号这个几个属性
1)创建一个具体的类
var student = {
}
2)追加属性
//追加属性
"name":"xxx",
"age":19 ,
"gender" :"男",
"address":"xxx",
3)追加方法
//追加方法:
//"方法名":function(){...}
//学习
"study":function(){
alert("学习xxx") ;
}
4)访问方式
//访问方式: var 值 = 对象名.key ;
document.write("学生的姓名是:"+student.name+"<br/>") ;
document.write("学生的年龄是:"+student.age+"<br/>") ;
document.write("学生的性别是:"+student.gender+"<br/>") ;
document.write("学生的住址是:"+student.address+"<br/>") ;
5)访问方法
//访问方法
//对象名.方法名() ;
student.study() ;
七、JavaScript常用事件编程
这些所有的事件在标签上 只需要在事件名称前面加上on..,将指定的事件绑定到onxx属性上
1)点击相关的事件
单击 click -- onclick属性
双击 dbclick -- ondblick属性
2)焦点事件
获取焦点 focus ----> onfocus属性
失去焦点 blur ----> onblu
3)选项卡发生变化的事件,一般用在select下拉菜单中
事件名称 change ---->onchange属性
1.单击点击事件函数
<body>
<input type="button" value="click" onclick="testClick()"/>
</body>
<script>
//单击点击事件函数
function testClick(){
alert("单击事件触发了");
</script>
2.双击点击事件函数
<body>
<input type="button" value="dbclick" oncdblclick="testDbClick()"/>
</body>
<script>
//双击点击事件函数
function testDbClick(){
alert("双击事件触发了");
</script>
3.获取焦点事件函数
<body>
用户名:<input type="text" value="请输入用户名" id="username"
onfocus="textFocus()" />
</body>
<script>
//获取焦点事件函数
function textFocus(){
//将文本输入框的value属性值清空
//dom操作:通过id="username"获取input标签对象
var a=document.getElementById("username");
a.value="";//清空就是定义一个空字符串
}
</script>
4.失去焦点事件函数
<body>
用户名:<input type="text" value="请输入用户名" id="username" onblur="testBlur()" /><span id="tip"></span>
</body>
<script>
//失去焦点事件函数
function testBlur(){
//需求:当鼠标移除文本输入框,触发失去焦点事件
//获取文本输入的内容,判断它的内容是否是王炜斌,如果不是,在文本输入框后面提示
//1)获取文本输入框的内容
var username= document.getElementById("username").value;
//2)获取id="tip"所在的span标签对象
var a=document.getElementById("tip");
//逻辑判断
if(username!="xxx"){
a.innerHTML="×".fontcolor("red");
}else{
a.innerHTML="√".fontcolor("green");
}
}
</script>
5.选项卡发生变化的事件
<body>
籍贯:
<select onchange="testChange()">
<option value="请选择">请选择</option>
<option value="陕西省">陕西省</option>
<option value="山西省">山西省</option>
<option value="广东省">广东省</option>
</select>
</body>
1)定义函数:选项卡发生变化的事件
function testChange(){
}
2)通过id="pro" 所在的select标签,获取它的标签对象
<body>
籍贯:
<select onchange="testChange()" id="pro">
<option value="请选择">请选择</option>
<option value="陕西省">陕西省</option>
<option value="山西省">山西省</option>
<option value="广东省">广东省</option>
</select>
</body>
<script>
//定义函数:选项卡发生变化的事件
function testChange(){
//通过id="pro" 所在的select标签,获取它的标签对象
var province = document.getElementById("pro");
}
</script>
3)获取下拉菜单的内容
<body>
籍贯:
<select onchange="testChange()" id="pro">
<option value="请选择">请选择</option>
<option value="陕西省">陕西省</option>
<option value="山西省">山西省</option>
<option value="广东省">广东省</option>
</select>
</body>
<script>
//定义函数:选项卡发生变化的事件
function testChange(){
//通过id="pro" 所在的select标签,获取它的标签对象,同时获取下拉菜单的内容
var province = document.getElementById("pro").value;
}
</script>
给第二个select标签(城市所在的下拉菜单),获取它的标签对象,动态拼接城市
4)获取id="city"所在的select标签对象
<body>
籍贯:
<select onchange="testChange()" id="pro">
<option value="请选择">请选择</option>
<option value="陕西省">陕西省</option>
<option value="山西省">山西省</option>
<option value="广东省">广东省</option>
</select>
<select id="city">
<!-- <option value="西安市">西安市</option>
<option value="渭南市">渭南市</option>
-->
</select>
</body>
<script>
//定义函数:选项卡发生变化的事件
function testChange(){
//通过id="pro" 所在的select标签,获取它的标签对象,同时获取下拉菜单的内容
var province = document.getElementById("pro").value;
//获取id="city"所在的select标签对象
var city = document.getElementById("city") ;
}
</script>
5)判断选择的省份的内容是否为"陕西省"/"山西省"/"广东省"
<body>
籍贯:
<select onchange="testChange()" id="pro">
<option value="请选择">请选择</option>
<option value="陕西省">陕西省</option>
<option value="山西省">山西省</option>
<option value="广东省">广东省</option>
</select>
<select id="city">
<!-- <option value="西安市">西安市</option>
<option value="渭南市">渭南市</option>
-->
</select>
</body>
<script>
//定义函数:选项卡发生变化的事件
function testChange(){
//通过id="pro" 所在的select标签,获取它的标签对象,同时获取下拉菜单的内容
var province = document.getElementById("pro").value;
//获取id="city"所在的select标签对象
var city = document.getElementById("city") ;
//判断选择的省份的内容是否为"陕西省"/"山西省"/"广东省"
if(province=="陕西省"){
}
if(province=="山西省"){
}
if(province=="广东省"){
}
}
}
</script>
6)定义一个城市数组
<body>
籍贯:
<select onchange="testChange()" id="pro">
<option value="请选择">请选择</option>
<option value="陕西省">陕西省</option>
<option value="山西省">山西省</option>
<option value="广东省">广东省</option>
</select>
<select id="city">
<!-- <option value="西安市">西安市</option>
<option value="渭南市">渭南市</option>
-->
</select>
</body>
<script>
//定义函数:选项卡发生变化的事件
function testChange(){
//通过id="pro" 所在的select标签,获取它的标签对象,同时获取下拉菜单的内容
var province = document.getElementById("pro").value;
//获取id="city"所在的select标签对象
var city = document.getElementById("city") ;
//判断选择的省份的内容是否为"陕西省"/"山西省"/"广东省"
if(province=="陕西省"){
//定义一个城市数组
var arr = ["西安市","渭南市","咸阳市","宝鸡市"] ;
}
if(province=="山西省"){
//定义一个城市数组
var arr = ["太原市","晋中市","临汾市","大同市"] ;
}
if(province=="广东省"){
//定义一个城市数组
var arr = ["广州市","东莞市","佛山市","深圳市"] ;
}
}
</script>
7)遍历数组,获取每一个城市,拼接省份所属市
<body>
籍贯:
<select onchange="testChange()" id="pro">
<option value="请选择">请选择</option>
<option value="陕西省">陕西省</option>
<option value="山西省">山西省</option>
<option value="广东省">广东省</option>
</select>
<select id="city">
<!-- <option value="西安市">西安市</option>
<option value="渭南市">渭南市</option>
-->
</select>
</body>
<script>
//定义函数:选项卡发生变化的事件
function testChange(){
//通过id="pro" 所在的select标签,获取它的标签对象,同时获取下拉菜单的内容
var province = document.getElementById("pro").value;
//获取id="city"所在的select标签对象
var city = document.getElementById("city") ;
//判断选择的省份的内容是否为"陕西省"/"山西省"/"广东省"
if(province=="陕西省"){
//定义一个城市数组
var arr = ["西安市","渭南市","咸阳市","宝鸡市"] ;
//遍历数组,获取每一个城市
for(var i = 0 ; i < arr.length;i++){
//拼接<option value="西安市">西安市</option> 文本
//给city标签对象(代表就是第二个select标签对象)拼接上面的文本
city.innerHTML +="<option value="+arr[i]+">"+arr[i]+"</option> "
}
}
if(province=="山西省"){
//定义一个城市数组
var arr = ["太原市","晋中市","临汾市","大同市"] ;
//遍历数组,获取每一个城市
for(var i = 0 ; i < arr.length;i++){
//拼接<option value="太原">太原市</option> 文本
//给city标签对象(代表就是第二个select标签对象)拼接上面的文本
city.innerHTML +="<option value="+arr[i]+">"+arr[i]+"</option> "
}
}
if(province=="广东省"){
//定义一个城市数组
var arr = ["广州市","东莞市","佛山市","深圳市"] ;
//遍历数组,获取每一个城市
for(var i = 0 ; i < arr.length;i++){
//拼接<option value="渭南市">渭南市</option> 文本
//给city标签对象(代表就是第二个select标签对象)拼接上面的文本
city.innerHTML += "<option value="+arr[i]+">"+arr[i]+"</option> "
}
}
}
</script>
优化:上述代码实现的结果是选择一个省份,获取的城市会叠加,因为是一个数组
所以需要将city的innerHTML清空掉,
这个清空放在判断选择的省份的内容是否为"陕西省"/"山西省"/"广东省"之前
<body>
籍贯:
<select onchange="testChange()" id="pro">
<option value="请选择">请选择</option>
<option value="陕西省">陕西省</option>
<option value="山西省">山西省</option>
<option value="广东省">广东省</option>
</select>
<select id="city">
<!-- <option value="西安市">西安市</option>
<option value="渭南市">渭南市</option>
-->
</select>
</body>
<script>
//定义函数:选项卡发生变化的事件
function testChange(){
//通过id="pro" 所在的select标签,获取它的标签对象,同时获取下拉菜单的内容
var province = document.getElementById("pro").value;
//获取id="city"所在的select标签对象
var city = document.getElementById("city") ;
//将city的innerHTML清空掉
city.innerHTML = "" ;
//判断选择的省份的内容是否为"陕西省"/"山西省"/"广东省"
if(province=="陕西省"){
//定义一个城市数组
var arr = ["西安市","渭南市","咸阳市","宝鸡市"] ;
//遍历数组,获取每一个城市
for(var i = 0 ; i < arr.length;i++){
//拼接<option value="西安市">西安市</option> 文本
//给city标签对象(代表就是第二个select标签对象)拼接上面的文本
city.innerHTML +="<option value="+arr[i]+">"+arr[i]+"</option> "
}
}
if(province=="山西省"){
//定义一个城市数组
var arr = ["太原市","晋中市","临汾市","大同市"] ;
//遍历数组,获取每一个城市
for(var i = 0 ; i < arr.length;i++){
//拼接<option value="太原">太原市</option> 文本
//给city标签对象(代表就是第二个select标签对象)拼接上面的文本
city.innerHTML +="<option value="+arr[i]+">"+arr[i]+"</option> "
}
}
if(province=="广东省"){
//定义一个城市数组
var arr = ["广州市","东莞市","佛山市","深圳市"] ;
//遍历数组,获取每一个城市
for(var i = 0 ; i < arr.length;i++){
//拼接<option value="渭南市">渭南市</option> 文本
//给city标签对象(代表就是第二个select标签对象)拼接上面的文本
city.innerHTML += "<option value="+arr[i]+">"+arr[i]+"</option> "
}
}
}
</script>
实现省市联动
八、学习Mysql的DDL语句(数据库的定义语句) 库的操作
1.查看数据库
-- 查询mysql数据库本身在带的所有数据库
-- show database
mysql>show databases;
运行结果:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema | -- mysql默认的配置库
| mysql | -- mysql库---里面有user表,代表当前管理员用户 root用户
| performance_schema | -- mysql配置库(mysql性能相关的)
| test | -- 测试库 里面空表,可以在进行测试练习,创建表,...
+--------------------+
4 rows in set (0.01 sec)
2.创建库
方式1:
-- 创建库
-- create database 库名; 直接创建库
mysql> create database MyEE_2204;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| myee_2204 | |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)
方式2:
-- create database if not exists 库名; 如果不存在这个库,创建
mysql> create database MyEE_2204;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| myee_2204 | |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)
3.查询创建数据库的默认字符
-- 查询创建的数据库的默认字符集
-- show create database 库名;
mysql> show create database MyEE_2204;
+-----------+--------------------------------------------------------------------+
| Database | Create Database |
+-----------+--------------------------------------------------------------------+
| myee_2204 | CREATE DATABASE `myee_2204` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+-----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)
4.修改数据库字符
gbk:中国的中文表:一个中文对应两个字节
utf8:一个中文对应三个字节,支持中简体
-- 修改数据库的字符集
-- alter database 库名 DEFAULT CHARACTER SET 字符集;
mysql> alter database MyEE_2204 default character set gbk;
Query OK, 1 row affected (0.01 sec)
mysql> show create database MyEE_2204;
+-----------+-------------------------------------------------------------------+
| Database | Create Database |
+-----------+-------------------------------------------------------------------+
| myee_2204 | CREATE DATABASE `myee_2204` /*!40100 DEFAULT CHARACTER SET gbk */ |
+-----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
5.删除库
方式1:
-- 删除库
-- drop database 库名; 直接删除库
mysql> drop database MyEE_2204;
Query OK, 0 rows affected (0.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
方式2:
drop database if exists 库名; 判断删除,如果存在库,删除
mysql> drop database if exists MyEE_2204;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
九、DDL语句(数据库的定义语句)表的操作
1.MySQL数据库常用的数据类型
1)int:整数,默认长度11
int:整数,默认长度11
int(),一般指定int即可
int(自定义长度)
2)vaechar:表示字符串类型数据
-- 姓名字段
name varchar(5),-- 姓名最大支持5个字符
3)datetime:日期时间,可以指定日期时间
4)tempstamp时间戳(系统当前即时时间)
5)double(几位数,小数点后保留的位数):表示小数类型数据
2.创建表
1)前提条件:使用库
-- 使用库
-- use 库名;
mysql> use MyEE_2204;
Database changed
mysql>
2)创建表
create table 表名(
字段名称1 字段类型1,
字段名称2 字段类型2,
字段名称3 字段类型3,
.....,
....,
字段名称n 字段类型 n
) ;
注意:最后一个字段名n 字段类型n不加" , "
mysql> create table staff(
-> id int,
-> name varchar(10),
-> gender varchar(5),
-> birthday varchar(50),
-> email varchar(50),
-> remark varchar(50),
-> age int
-> );
Query OK, 0 rows affected (0.02 sec)
3.查询表
1)查询库中的所有表
-- 查看库中的所有表
-- show 表名;
mysql> show tables;
+---------------------+
| Tables_in_myee_2204 |
+---------------------+
| staff |
+---------------------+
1 row in set (0.00 sec)
2)查询表的结构
-- 查询表的结构
-- desc 表名;
mysql> desc staff;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| gender | varchar(2) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| email | varchar(25) | YES | | NULL | |
| remark | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
6 rows in set (0.02 sec)
4.修改表
1)修改表的字段名称
语法:alter table 表名 change gender 旧字符名称 新字符名称 以前的字段类型;
-- 修改表的字段名称
-- 语法: alter table 表名 change 旧字段名称 新字段名称 以前的字段类型;
mysql> alter table staff change name username varchar(20) ;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc staff;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| gender | varchar(2) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| email | varchar(10) | YES | | NULL | |
| remark | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
6 rows in set (0.02 sec)
2)修改表的字段类型
语法:alter table 表名 modify 字段名称 新的字段类型;
-- 修改的表的字段类型
-- 语法:alter table 表名 modify 字段名称 新的字段类型;
mysql> alter table staff modify email varchar(20) ;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc staff;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| gender | varchar(2) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| email | varchar(20) | YES | | NULL | |
| remark | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
7 rows in set (0.02 sec)
3)给表中新添加一列(一个新的字段名称)
语法: alter table 表名 add 字段名称 字段类型;
-- 给表中新添加一列(一个新的字段名称)
-- 语法: alter table 表名 add 字段名称 字段类型;
mysql> alter table staff add age int;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc staff;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| gender | varchar(2) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| email | varchar(20) | YES | | NULL | |
| remark | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
7 rows in set (0.02 sec)
4)将表中的某一列(某个字段)删除
语法:alter table 表名 drop 字段名称;
-- 复制一张一模一样的表
-- 语法: create table 新的表名 like 旧表名;
mysql> alter table staff drop remark ;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc staff;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| gender | varchar(2) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| email | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
6 rows in set (0.02 sec)
5)复制一张一模一样的表
语法: create table 新的表名 like 旧表名;
-- 复制一张一模一样的表
-- 语法: create table 新的表名 like 旧表名;
mysql> create table yuangong like staff ;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+-------------------+
| Tables_in_ee_2204 |
+-------------------+
| staff |
| yuangong |
+-------------------+
2 rows in set (0.00 sec)
6)对表名重命名
语法:alter table 旧表名 rename to 新表名;
-- 对表名重命名
-- 语法:alter table 旧表名 rename to 新表名;
mysql> alter table staff rename to sta;
Query OK, 0 rows affected (0.01 sec)
7)删除表
方法1:
语法: drop table 表名;
-- 删除表
-- 语法1: drop table 表名;
mysql> drop table staff;
Query OK, 0 rows affected (0.01 sec)
方法2:
语法:drop table if exists 表名;
-- 删除表
-- 语法2: drop table if exists 表名;
mysql> drop table if exists staff;
Query OK, 0 rows affected (0.01 sec)
十、SQLyog图形界面化中操作失去了语句
1.插入表记录
1)MySQL注释
-- mysql注释 (普通注释:单行注释)
# 注释(特殊注释)
/*
多行注释
*/
2)创建表
-- 建议命令行的去写
--使用库
USE ee_2204;
-- 创建表
CREATE TABLE teacher(
id INT , -- 教师编号
NAME VARCHAR(20), -- 教师名称
age INT, -- 教师年龄
gender VARCHAR(5) -- 性别
);
3)查询表的结构
-- ddl语句:数据库定义语句 查询表的结构
DESC teacher ;
4)插入数据
语法1
-- 语法1:插入全部字段,给全部字段进行赋值
insert into 表名 values(值1,值2,值3,值4...,值n) ; 一次插入一条
注意:插入的值必须和当前字段顺序要对应,而且还有符号这个字段数据类型
INSERT INTO student VALUES(1,"张三",'男','鄠邑区','zhangsna@163.com') ;
语法2
-- 语法2:一次插入多条
insert into 表名 values(值1,值2,值3,值4...,值n),(值1,值2,值3,值4...,值n)
INSERT INTO student VALUES(2,"李四",'男','高陵区','李四@163.com'),
(3,"王五","男","西安市","王五@163.com"),
(4,"赵六","男","西安市","赵六@163.com") ;
语法3
插入部分字段,未插入的字段的默认值就是null
-- insert into 表名(字段名称1,字段名称2,,,) values(值1,值2....) ; 这种写法也支持一次插入多条
INSERT INTO student(id,NAME,sex,address) VALUES(5,"钱七","女","鄠邑区"),
(6,"孙八","男","咸阳市") ;
5)查询表的记录
-- 查询表的记录 DQL语句 :数据库查询语句 (语法是最多的!)
-- 查询全表 select *(所有字段) from 表名;
SELECT * FROM student ;
注意:-企业中 "禁止"使用*, 必须写全部字段! (自己去使用*,没有问题的!)
2.修改表的记录
1)插入一条数据
INSERT INTO student VALUES(7,'男','王五','西安市','wangwu@163.com') ;
注:上面可以插入成功,因为name和sex都是varchar类型,字符串,但是实际中非法数据,需要修改数据
2)修改表中的记录
一般情况,都是带条件修改
语法1:update 表名 set 字段名称 = 值 where 字段名称 = xx ; 修改单个字段
实际开发中,每一张表都有 非业务字段--- id 序号,id是唯一的,而且可以有自增长约束
UPDATE student SET NAME = "孙悟空" WHERE id = 6 ;
语法2:修改多个字段值
update 表名 set 字段名称1 = 值1,字段名称2 = 值2,字段名称3= 值3,...where 字段名称 = xx ;
UPDATE student SET NAME = "王五" ,sex = "男" WHERE id = 7 ;
语法3:一般不用的,批量修改,针对数量比较小的时候
update 表名 set 字段名称= 值;
UPDATE student SET address = "宝鸡市" ;
3)带多个条件同时修改
update 表名 set 字段名称 = 值 where 条件1 =xx and 条件2 and 条件3.....
UPDATE student
SET NAME = '三三'
WHERE
address = '鄠邑区'
AND
sex = '男 '
AND
email = 'zhangsan@163.com ;
3.删除表中指定记录以及全表记录
删除表指定的记录,都是带条件删除
语法1: delete from 表名 where 字段名称 = 值;
DELETE FROM student WHERE id = 7 ;
语法2:TRUNCATE TABLE 表名 ;
TRUNCATE TABLE student ;
区别:
共同点:
都能够删除全表记录
不同点:
delete from 表名:仅仅只是删除全表数据,而不是删除表,如果表中id(非业务字段有自增长约束),不会影响自增长约束!意味着下次插入数据的时候,id继续按上次的id自增.
truncate table 表名:会将表中的全部记录删除并且同时删除表,而且会自动创建一张一模一样的表,它直接影响了自增长约束的值下一次插入数据的时候,自增长id字段从1开始.
自增长约束:id主键并且自增长,id不用给值
INSERT INTO student(NAME,gender,address,email)
-- 创建一个学生表
CREATE TABLE student(
-- -- 非业务字段id 序号 ,PRIMARY KEY 主键(非空且唯一),AUTO_INCREMENT :自增长约束
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR(20),
gender VARCHAR(5),
address VARCHAR(20) ,
email VARCHAR(50)
);
创建库
-- 创建库
CREATE DATABASE mysql_01;
选择库mysql_01
-- 选择库
USE mysql_01;
创建表
-- 创建表
CREATE TABLE student (
id INT,
-- 编号
NAME VARCHAR (20),
-- 姓名
age INT,
-- 年龄
sex VARCHAR (5),
-- 性别
address VARCHAR (100),
-- 地址
math INT,
-- 数学
english INT-- 英语
);
查看全表数据
-- 查看全表数据
SELECT * FROM student;
插入数据
-- 插入数据
INSERT INTO student (
id,
NAME,
age,
sex,
address,
math,
english
)
VALUES
(1, '唐僧', 55, '男', ' 杭州', 66, 78),
(2,'孙悟空',45,'男','深圳',98,87),
(3,'猪八戒',55,'男','香港',56,77),
(4, '沙僧', 20, '男', '湖南', 76, 65),
(5,'柳青',20,'男','湖南',86,NULL),
(6, '柳红', 19, '女', '香港 ', 99, 99),
(7,'小燕子',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65) ;
十一.常用DQL语句:数据库查询语句
查询不会对数据库中的数据进行修改.只是一种显示数据的方式
1.最基本的通用查询:查询全表数据
使用*表示所有列
SELECT * FROM 表名;
-- 查询全表数据
-- SELECT * FROM 表名;
-- 查询所有学生
SELECT * FROM student;
注:实际开发中,写sql的时候,不能书写*,书写具体的字段名称
SELECT
id,
NAME,
age,
sex,
address,
math,
english
FROM
student ;
2.查询指定列
SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
SELECT
address
FROM
student ;
上述运算结果为
地址字段出现数据冗余,也就是重复性太多了
通过关键字distinct,将地址字段冗余数据去重
SELECT DISTINCT
address
FROM
student ;
运算结果为
3.通过起别名进行查询
使用别名的好处: 显示的时候使用自己需要的名字,并不修改表的结构
1)对列起别名
SELECT `字段名 1` AS 别名, `字段名 2` AS 别名... FROM 表名;
SELECT
student.id AS '编号',
-- 编号
student.`name` AS '姓名',
-- 姓名
student.`age` AS '年龄',
-- 年龄
student.`sex` AS '性别',
-- 性别
student.`address` AS '地址',
-- 地址
student.`math` AS '数学成绩',
-- 数学成绩
student.`english` AS '英语成绩' -- 英语成绩
FROM
student ;
AS可以省略
SELECT
student.id '编号',
-- 编号
student.`name` '姓名',
-- 姓名
student.`age` '年龄',
-- 年龄
student.`sex` '性别',
-- 性别
student.`address` '地址',
-- 地址
student.`math` '数学成绩',
-- 数学成绩
student.`english` '英语成绩' -- 英语成绩
FROM
student ;
2)对表起别名(表的名字比较长),同时给列起别名
1)查询全表:SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 别名;
SELECT
s.id AS '编号',
-- 编号
s.name AS '姓名',
-- 姓名
s.age AS '年龄',
-- 年龄
s.sex AS '性别',
-- 性别
s.address AS '地址',
-- 地址
s.math AS '数学成绩',
-- 数学成绩
s.english AS '英语成绩' -- 英语成绩
FROM
student AS s ;
可以给字段名带上`符号,如下述的代码,也可以不带上`
as可以省略
SELECT
s.id '编号',
-- 编号
s.`name` '姓名',
-- 姓名
s.`age` '年龄',
-- 年龄
s.`sex` '性别',
-- 性别
s.`address` '地址',
-- 地址
s.`math` '数学成绩',
-- 数学成绩
s.`english` '英语成绩' -- 英语成绩
FROM
student s ;
2)查询的时候可以将字段为整数类型的数据进行求和
需求:查询学院的id,name,age,sex以及数据和英语成绩的总分
-- 需求:查询学院的id,name,age,sex以及数据和英语成绩的总分
SELECT
id '学生编号',
NAME '学生姓名',
age '学生年龄',
sex '学生性别',
(math + english) '总分'
FROM
student ;
根据运算结果可以发现学生编号为5的柳青总分为null空值
注意事项:两个整数类型求和,如果其中一个字段是null值,求和结果为null(没意义)空值
在mysql中有函数ifnull(字段名称,给期望值);
如果当前字段名称为null值,可以给它一个期望值
SELECT
id '学生编号',
NAME '学生姓名',
age '学生年龄',
sex '学生性别',
(math + IFNULL(english, 0)) '总分' -- 当英语成绩是null空值,给一个期望值0
FROM
student ;
4.带条件查询
select 指定的字段名称 from 表名 where 条件;
1)where后面跟单个条件,可以使用赋值运算符=,比较运算符<,>,<=,>=,!=
赋值运算符
需求:查询年龄是20岁的学生的所有信息
SELECT
*
FROM
student
WHERE age = 20 ;
比较运算符
需求:查询学生的年龄大于等于20 的学生
SELECT
NAME '学生姓名',
age '学生年龄',
sex '学生性别',
(math + IFNULL(english, 0)) '总分'
FROM
student
WHERE
age <= 20 ;
需求:查询学生年龄不为20岁的学生所有信息!=
语法1:
SELECT
*
FROM
student
WHERE
age != 20 ;
语法2: 针对上述语法,在mysql中判断某个条件不等于用<>
SELECT
*
FROM
student
WHERE
age <> 20 ;
2)where后面跟多个条件,并列条件或者或关系的条件
a.并列条件
语法1:可以使用逻辑运算符&&
需求:查询学生年龄在20岁到30岁的学生所以信息
SELECT
*
FROM
student
WHERE
age>=20 && age<=30;
语法2:在mysql中多个并列条件,推荐使用关键字and
where 字段名称1 条件1 and 字段名称2 条件2
SELECT
*
FROM
student
WHERE
age>=20 AND age<=30;
语法3:还可以使用between and
where 字段名称 between 值1 and 值2; 等价于 字段名称>=值1 and 字段名称<=值2;
SELECT
*
FROM
student
WHERE
age
BETWEEN 20 AND 30;
结果都是
b.或的关系
语法1:可以使用逻辑运算符||
需求:查询学生年龄是18岁或者20岁或者45岁的学生所有信息
SELECT
*
FROM
student
WHERE
age=18 || age=20 || age=45;
语法2:在mysql中多个或的关系哦,推荐使用关键字or
SELECT
*
FROM
student
WHERE
age=18
OR
age=20
OR
age=45;
语法3:还可以使用in集合语句
where 字段名称 in(值1,值2,值3,...);
SELECT
*
FROM
student
WHERE
age IN(18,20,45);
结果都为
3)where条件后面可以跟某个字段为null的格式
语法1:where 字段名称 is null
SELECT
id '编号',
NAME '学生姓名',
sex '学生性别',
address '地址',
math '数学成绩',
english '英语成绩'
FROM
student
WHERE
english IS NULL;
语法2:where 字段名称 is not null
SELECT
id '编号',
NAME '学生姓名',
sex '学生性别',
address '地址',
math '数学成绩',
english '英语成绩'
FROM
student
WHERE
english IS NOT NULL;
5.模糊查询
关键字:like
1 )匹配任意字符:%
语法:select 指定字段列表 from 表名 where like '%字符%'
需求:模糊查询姓柳的学生所有信息
SELECT
*
FROM
student
WHERE
NAME
LIKE '%柳%';
2 )一个下划线代表一个任意字符值:_
需求:查询姓名是两个字符的学生的信息
语法:where 字段名称 like '_几个字符就是几个下划线_';
SELECT
*
FROM
student
WHERE
NAME
LIKE '__';
%和_ 两个可以结合使用
需求:模糊查询学生姓名第二个字为悟的学生信息
SELECT
*
FROM
student
WHERE
NAME LIKE '%_悟%';
6.聚合函数查询
针对单行单列的函数
语法:select 聚合函数(字段名称) from 表名;
1)常见的聚合函数
a.查询当前表的记录:count(字段名称)
SELECT
COUNT(english) AS '总记录数'
FROM
student;
由于english中含有null所以总的记录为7,但实际上应该是8,需要使用ifnull(字段名称,期望值);
SELECT
COUNT(IFNULL(english,0)) AS '总记录数'
FROM
student;
通用的方法是用非业务字段id进行查询
SELECT
COUNT(id) AS '总记录数'
FROM
student;
b.针对某列字段值求和(整数):sum(字段名称)
需求:查询数学成绩总和
SELECT
SUM(math) AS '数学总成绩'
FROM
student;
c.平均分:avg(字段名称)
需求:查询数学成绩平均分
SELECT
AVG(math) AS '数学成绩平均分'
FROM
student;
d.最高分:max(字段名称)
最低分:min(字段名称)
SELECT
MAX(math) AS '数学最高分',
MIN(math) AS '数学最低分'
FROM
student;
7.复杂查询和聚合查询一起使用
语法:where 字段名称 比较运算符(select 复合函数查询)
需求:查询出数学成绩大于平均分的学生信息
SELECT
*
FROM
student
WHERE
math>(SELECT AVG(math) FROM student);
8.排序查询
关键字:order by
1)单个字段排序
语法:语法:select 字段列表 from 表名 order by 字段名称 排序规则
排序规则:
升序(默认值):asc
降序;desc
需求:数学成绩升序排序,查询所有信息
SELECT
*
FROM
student
ORDER BY
math ASC; -- math后面如果没有带排序条件,默认就是升序
需求:将英语成绩降序排序查询所有信息
SELECT
*
FROM
student
ORDER BY
english DESC;
2)多个字段排序
语法:select 字段列表 from 表名 order by 字段名称1 排序规则1 ,字段名称2 排序规则2 ;
需求:查询数学成绩降序,英语成绩是升序的所有学生信息
如果数学成绩相同,按照英语成绩排序规则进行操作
如果英语成绩有null,按照数学排序规则进行操作
SELECT
*
FROM
student3
ORDER BY math DESC ,english ASC ;
创建库
-- 创建库
CREATE DATABASE mysql_02;
选择库
-- 选择库
USE mysql_02;
创建表
--创建表
CREATE TABLE student(
id INT, -- id编号
NAME VARCHAR(20), -- 姓名
sex VARCHAR(2), -- 性别
chinese INT, -- 语文
english INT, -- 英语
math INT -- 数学
);
插入数据
-- 插入数据
INSERT INTO student(id,NAME,sex,chinese,english,math) VALUES
(1,'武松','男',89,78,90),(2,'潘金莲','女',67,53,95),
(3,'扈三娘','女',87,78,77),(4,'武大郎','男',88,98,92),
(5,'西门庆','男',82,84,67),(6,'玉面狐','女',55,85,45),
(7,'牛魔王','男',75,65,30),(8,'孙悟空','男',90,100,91),
(9,'唐三','男',99,99,99),(10,'小舞','女',60,95,85),
(11,'石昊','男',96,68,40),(12,'狠人','女',98,90,20);
查询表数据
-- 查询表数据
SELECT * FROM student;
最终的表
本文是以上述创建的表来进行操作的
十二、其他查询语句
1.分组查询
分组查询使用关键字group by
注意事项1:gruop by 的后面不能使用聚合函数
语句:
SELECT
字段列表(可以包含查询的分组字段)
FROM
表名
GROUP BY
分组字段;
需求:按照性别进行分组,查询分组信息和总人数(总人数用关键字count
SELECT
sex '性别', -- 查询分组字段
COUNT(id) '总人数'
FROM
student
GROUP BY sex ;
如果现在有where条件,并且还有分组的查询
需求:要按性别分组,查询性别以及数学的平均分
条件:数学成绩不小于70分的人参与分组
select
sex,
avg(math)
from
student
group by
sex
where
math > 70 ;
运行后,出现错误代码
正确的应该是
SELECT
sex '性别',
AVG(math) '数学平均分'
FROM
student
WHERE
math > 70
GROUP BY sex ;
注意事项: group by 后面不能使用where条件,应该先满足这个条件,才能进行分组
2.筛选查询
筛选查询使用关键字having
having后面是可以使用聚合函数的,且having必须置于group by之后
需求:按性别进行分组,查询分组信息以及数学平均分和总人数
条件:数学成绩不小于70分的人参与分组
筛选:总人数大于2的那一组
SELECT
sex '学生性别',
AVG(math) '数学平均分',
COUNT(id) '总人数'
FROM
student
WHERE
math > 70
GROUP BY
sex
HAVING
COUNT(id) > 2 ;
注意事项:
关于group by和having使用的先后顺序,而且有where条件
where在group by 之前,having在group by 之后
group by不能使用聚合函数,having是可以使用聚合函数查询的
3.分页查询
筛选查询使用关键字limit
语法格式:
select
字段列表
from
表名
limit
起始行数,每页显示的条数;
注意:起始行数从0开始算的
算法:(当前页码-1)*每页显示的条数
需求:每页显示4个学生数据,求每页的分页数据
第一页:
SELECT
*
FROM
student
LIMIT
0,4;
第二页:
SELECT
*
FROM
student
LIMIT
4,4;
第三页:
SELECT
*
FROM
student
LIMIT
8,4;
4.数据库的约束
约束:在操作数据库的时候,约束管理人员使用数据的时候行为;
举例: 有一张员工表,插入一行数据,没有给员工给性别值,默认值就是null,这毫无意义
默认约束 default :当在给某个字段没有插入值的时候,这个默认约束就可以作用,给字段设置默认值
创建一张员工表
CREATE TABLE emp(
id INT, -- 员工编号
emp_name VARCHAR(10),-- 员工姓名
gender VARCHAR(5) -- 员工性别
);
插入正常数据
INSERT INTO emp VALUES(1,'孙悟空','男') ;
插入部分字段
INSERT INTO emp(id,emp_name) VALUES(2,'猪八戒') ;
可以发现猪八戒的性别是null,没有任何意义
创建新表加入默认约束
CREATE TABLE emp(
id INT, -- 员工编号
emp_name VARCHAR(10),-- 员工姓名
gender VARCHAR(5) DEFAULT '男' -- 员工性别 ,加入默认约束
);
再插入部分字段
INSERT INTO emp(id,emp_name) VALUES(2,'猪八戒') ;
可以发现没有给猪八戒添加性别,但是表自动添加了
也可以更改字段类型加入默认约束
ALTER TABLE emp MODIFY gender VARCHAR(5) DEFAULT '男' ;