第43天(就业班) jQuery-AJAX、mysql的优化

来源:互联网 发布:北京网络推广培训 编辑:程序博客网 时间:2024/05/24 06:49
1.事件a)Ready事件<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>ready.html</title>    <meta http-equiv="content-type" content="text/html; charset=UTF-8">    <script type="text/javascript" src="../js/jquery-1.8.2.js"></script>  </head>  <body><script type="text/javascript">//定义a()和b()二个方法function a(){alert("JS方式");}function b(){alert("JQUERY方式");}/*使用JS方式加载a()和b()二个方法window.onload = function(){a();}window.onload = function(){b();}*//*使用jQuery方式加载a()和b()二个方法$(document).ready(function(){a();});$(document).ready(function(){b();});*//*使用jQuery最简方式加载a()和b()二个方法$(function(){a();});$(function(){b();});*///将js方式的onload与jquery方式的ready对比,看哪个执行快window.onload = function(){alert("传统");}$(function(){alert("现代");});</script>  </body></html>2)change事件<!DOCTYPE html><html>  <head>    <title>02_change.html</title>    <meta name="keywords" content="keyword1,keyword2,keyword3">    <meta name="description" content="this is my page">    <meta name="content-type" content="text/html; charset=UTF-8">    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->  </head>  <body>  <select id="city"><option value="bj">北京</option><option value="sh">上海</option><option value="gz">广州</option></select><script type="text/javascript">//当<select>标签触发onchange事件,显示选中<option>的value和innerHTML属性的值$("#city").change( function(){ var $option = $("#city option:selected");var value = $option.val();var text = $option.text();alert(value+":"+text);} );</script>  </body></html>3)focus事件<input type="text" value="加载页面时获取光标并选中所有文字" size="50"/><script type="text/javascript">//加载页面时获取光标并选中所有文字$(function(){//光标定位文本框$(":text").focus();//选中文本框的所有文本$(":text").select();});</script>4)keyup事件<script type="text/javascript">//当按键弹起时,显示所按键的unicode码$(function(){//IE浏览器会自动创建event这个事件对象,那么程序员可以根据需要来使用该event对象$(document).keyup(function(){//获取按钮的unicode编码var code = event.keyCode; alert(code);});});</script>5)mousemove事件X=<input type="text" id="xID"/><br/>Y=<input type="text" id="yID"/><script type="text/javascript">//显示鼠标移动时的X和Y座标$(function(){$(document).mousemove(function(){var x = event.clientX;var y = event.clientY;$("#xID").val(x);$("#yID").val(y);});});</script>6)mouseover事件<table border="2" align="center" width="80%" id="tableID"><tr><td>张三</td><td>男</td><td>22</td></tr><tr><td>李四</td><td>男</td><td>24</td></tr><tr><td>王五</td><td>男</td><td>26</td></tr><tr><td>周六</td><td>男</td><td>28</td></tr></table><hr/><img height="120px" src="../images/zgl.jpg" style="position:absolute;left:30%;border-style:dashed;border-color:white"/><img height="120px" src="../images/lb.jpg" style="position:absolute;left:60%;border-style:dashed;border-color:white"/><script type="text/javascript">//鼠标移到某行上,某行背景变色$("table tr").mouseover(function(){$(this).css("background-color","inactivecaption");});//鼠标移出某行,某行还原$("table tr").mouseout(function(){$(this).css("background-color","white");});//鼠标移到某图片上,为图片加边框$("img").mouseover(function(){$(this).css("border-color","red");});//鼠标移出图片,图片还原$("img").mouseout(function(){$(this).css("border-color","white");});</script>7)submit事件<form action="06_mouseover_mouseout.html" method="post">用户名:<input type="text"/><input type="submit" value="表单提交"/></form><script type="text/javascript">//浏览器加载web页面时触发$(function(){//将光标定位于文本框中$(":text").focus();});</script><script type="text/javascript">//检测是否为中文,true表示是中文,false表示非中文function isChinese(str){if(/^[\u3220-\uFA29]+$/.test(str)){return true;}else{return false;}}</script><script type="text/javascript">//当表单提交前检测$("form").submit(function(){var flag = false;//获取文本框的中内容var name = $(":text").val();//去二边的空格name = $.trim(name);//如果没有填内容if(name.length == 0){alert("用户名必填");//将光标定位于文本框中$(":text").focus();//清空文本框中的内容$(":text").val("");}else{//调用方法flag = isChinese(name);//如果不是中文if(!flag){alert("用户名必须填中文");//将光标定位于文本框中$(":text").focus();//清空文本框中的内容$(":text").val("");}}return flag;});</script>2.jQuery中的ajax的apiJQuery 对 Ajax 操作进行了封装, 在 jQuery 中最常用的方法是 load(),$.ajax(),$.get() 和 $.post()。。。目的:简化客户端与服务端进行局部刷新的异步通讯(1)取得服务端当前时间简单形式:jQuery对象.load(url)返回结果自动添加到jQuery对象代表的标签中间如果是Servlet的话,采用的是GET方式复杂形式:jQuery对象.load(url,sendData,function(backData,textStatus,ajax){... ...})sendData = {"user.name":"jack","user.pass":"123"};以JSON格式文本方式发送,使用POST方式发送,服务端能收到数据注意:对于load方法而言,如果请求体无参数发送的话,load方法采用GET方式提交注意:对于load方法而言,如果请求体有参数发送的话,load方法采用POST方式提交注意:使用load方法时,自动进行编码,无需手工编码<html> <head> <title> 取得服务端当前时间 </title>        <script type="text/javascript" src="js/jquery-1.8.2.js"></script>    </head>    <body>        当前时间:<span id="time"></span><br>        <form>            <input type="button" value="获取时间"> <script type="text/javascript">$(":button").click(function(){            //参数一:发送的路径            var url = "${pageContext.request.contextPath}/ /TimeServlet?time="+new Date().getTime();            //参数二:以JSON文本书写的发送的参数            var sendDate = {                "name" : "哈哈",                "sal"  :  6000            };            //参数三:回调函数            $("#time").load(url,sendDate,function(backData,textStatus,xmlHttpRequest){                //回调函数中参数一:backData表示返回的数据,它是js对象                //回调函数中参数二:textStatus表示返回状态的文本描述,例如:success,error,                //回调函数中参数三:xmlHttpRequest表示ajax中的核心对象                //alert("backData=" + backData);//它是一个js对象                //alert("textStatus=" + textStatus);                //alert("xmlHttpRequest=" + xmlHttpRequest.readyState);                //alert("xmlHttpRequest=" + xmlHttpRequest.status);                //alert("xmlHttpRequest=" + xmlHttpRequest.responseText);//它是一个字符串                //项目中只需要使用backDate即可                            });                                        //$("#time").load(url,sendDate);            //$("#time").load(url);            });            </script>        </form>    </body></html>package cn.itcast.javaee.js;import java.io.IOException;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 取得服务端当前时间 */public class TimeServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("GET");String name = request.getParameter("name");String sal = request.getParameter("sal");System.out.println(name+":"+sal);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str = sdf.format(new Date());response.setContentType("text/html;charset=UTF-8");PrintWriter pw = response.getWriter();pw.write(str);pw.flush();pw.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("POST");String name = request.getParameter("name");String sal = request.getParameter("sal");System.out.println(name+":"+sal);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str = sdf.format(new Date());response.setContentType("text/html;charset=UTF-8");PrintWriter pw = response.getWriter();pw.write(str);pw.flush();pw.close();}}load()方法参数解释:load()方法是 jQuery 中最为简单和常用的 Ajax 方法, 能载入远程的 HTML 代码并插入到 DOM 中. 它的结构是:   load(url[, data][,callback]) 程序员只需要使用 jQuery 选择器为 HTML 片段指定目标位置, 然后将要加载的文件的 url 做为参数传递给 load() 方法即可data必须符合json格式的字符串,即{}表示一个对象传递方式: load() 方法的传递参数根据参数 data 来自动自定. 如果没有参数传递, 采用 GET 方式传递, 否则采用 POST 方式对于必须在加载完才能继续的操作, load() 方法提供了回调函数, 该函数有三个参数: 代表请求返回内容的 data; 代表请求状态的 textStatus 对象和 XMLHttpRequest 对象    参数一:url发送到哪里去    参数二: sendData发送请求体中的数据,符合JSON格式,例如:{key:value,key:value}    参数三:function处理函数,类似于传统方式ajax.onreadystatechange = 处理函数    其中参数三为function处理函数最多可以接收三个参数,含义如下第一个参数:服务端返回的数据,例如:backData第二个参数:服务端状态码的文本描述,例如:success、error、第三个参数:ajax异步对象,即XMLHttpRequest对象        以上所有参数的名字可以任意,但必须按顺序书写,尽量做到见名知意   (2)检查注册用户名和密码是否存在        $.get(url,sendData,function(backData,textStatus,ajax){... ...})$.post(url,sendData,function(backData,textStatus,ajax){... ...})赵君提倡注意:使用get或post方法时,自动进行编码,无需手工编码<%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>检查注册用户名和密码是否存在</title>    <script type="text/javascript" src="js/jquery-1.8.2.js"></script>  </head>  <body><!-- 在异步提交的方式下,form标签的action和method属性没有意义--><form action="01_time.jsp" method="GET"><table border="2" align="center"><tr><th>用户名</th><td><input type="text" name="username"/></td></tr><tr><th>密码</th><td><input type="password" name="password"/></td></tr><tr><td colspan="2" align="center"><input type="button" value="检查" style="width:111px"/></td></tr></table></form><span></span><script type="text/javascript">$(":button").click(function(){var username = $(":text").val();//哈哈var password = $(":password").val();//123var url = "${pageContext.request.contextPath}/UserServlet?time="+new Date().getTime();/*手工写JSON文本var sendData = {"username" : username,"password" : password};*/var sendData = $("form").serialize();$.post(url,sendData,function(backDate){//backDate://如果服务器返回html,即backDate就是string,不要解析//如果服务器返回json,即backDate就是object,要解析//如果服务器返回xml,即backDate就是object,要解析var $img = $("<img src='"+backDate+"' width='14px' height='14px'>");$("span").text("");$("span").append($img);});});</script>  </body></html>package cn.itcast.javaee.user;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 检查注册用户名和密码是否存在 */public class UserServlet extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");//哈哈String password = request.getParameter("password");//123String tip = "images/MsgSent.gif";if("哈哈".equals(username) && "123".equals(password)){tip = "images/MsgError.gif";}response.setContentType("text/html;charset=UTF-8");PrintWriter pw = response.getWriter();pw.write(tip);pw.flush();pw.close();}}(3)jQuery解析XML<?xml version="1.0" encoding="UTF-8"?><root><city>广州</city><city>深圳</city><city>香港</city><city>澳门</city><city>台湾</city><city>中山</city></root><%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>jQuery解析XML</title>    <script type="text/javascript" src="js/jquery-1.8.2.js"></script>  </head>  <body><input type="button" value="解析服务器响应的xml文件"/><script type="text/javascript">$(":button").click(function(){var url = "${pageContext.request.contextPath}/03_city.xml?time="+new Date().getTime();var sendData = null;$.get(url,sendData,function(xml){//用jquery中的api解析xml文件,这时的xml是js对象var $xml = $(xml).find("city");//迭代$xml.each(function(){var city = $(this).text();alert(city);});});});</script>  </body></html>package cn.itcast.javaee.provincecity;import java.io.IOException;import java.util.LinkedHashSet;import java.util.Set;import com.opensymphony.xwork2.ActionSupport;/** * 控制器  */public class ProvinceCityAction extends ActionSupport{private String province;public void setProvince(String province) {this.province = province;//System.out.println("注入" + province);}//根据省份查询城市public String findCityByProvince() throws Exception {setCity = new LinkedHashSet<String>();if("湖南".equals(province)){setCity.add("长沙");setCity.add("株洲");}else if("广东".equals(province)){setCity.add("广州");setCity.add("中山");setCity.add("佛山");}return SUCCESS;}private Set<String> setCity;public Set<String> getSetCity() {return setCity;}}<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>   <package name="myPackage" extends="json-default" namespace="/">   <!-- 根据省份查询城市 -->   <action    name="findCityByProvinceRequest"    class="cn.itcast.javaee.js.provincecity.ProvinceCityAction"    method="findCityByProvince"><result name="success" type="json"/>   </action>   </package></struts><%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>省份-城市,基于jQuery的AJAX二级联动</title>    <script type="text/javascript" src="js/jquery-1.8.2.js"></script>  </head>  <body><select id="province"><option>选择省份</option><option>湖南</option><option>广东</option></select><select id="city"><option>选择城市</option></select><!-- 省份->城市 --><script type="text/javascript">//定位省份下拉框,同时添时内容改变事件$("#province").change( function(){//清空原城市下拉框中的内容,除第一项外$("#city option:gt(0)").remove();//获取选中的省份var province = $("#province option:selected").text();//如果选中的不是"选择省份"if("选择省份"!=province){$.ajax( {type    : "POST",url     : "${pageContext.request.contextPath}/struts2/findCityByProvinceRequest?time="+new Date().getTime(),data    : {"province":province},success : function(backDate,textStatus,ajax){//alert(backDate!=null?"收到":"为收到");//alert(ajax.responseText);//解析json文本var array = backDate.setCity;  var size = array.length;  for(var i=0;i<size;i++){  var city = array[i];  var $option = $("<option>"+city+"</option>");  $("#city").append($option);  }  }} );}} );</script>  </body></html>   (3)jQuery对象.serialize()         作用:自动生成JSON格式的文本    注意:为每个jQuery对象设置一个name属性,因为name属性会被认为请求参数名    注意:必须用<form>标签元素    适用:如果属性过多,强烈推荐采用这个API <script type="text/javascript">//定位按钮,同时添加单击事件$(":button").click(function(){//获取用户名和密码var username = $(":text:first").val();var password = $(":text:last").val();//去空格username = $.trim(username);password = $.trim(password);//异步发送到服务端var url = "${pageContext.request.contextPath}/checkRequest?time="+new Date().getTime();/*手工书写JSON文本var sendData = {"user.username":username,"user.password":password};*//*工具生成JSON文本*/var sendData = $("form").serialize();$.post(url,sendData,function(backData,textStatus,ajax){//backData是一个JSON文本/对象,你得通过.号访问其属性值var tip = backData.tip;//创建img节点var $img = $("<img src='" + tip + "' height='18px' widht='18px'/>")//清空span节点中的内容$("span").text("");//将img节点添加到span节点中$("span").append( $img );});});</script>        public class RegisterAction extends ActionSupport{private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}/** * 检查注册用户名和密码是否存在 */public String checkMethod() throws Exception {tip = "images/MsgSent.gif";if("帅帅".equals(user.getUsername()) && "123".equals(user.getPassword())){tip = "images/MsgError.gif";}return "ok";}private String tip;public String getTip() {return tip;}/** * var backData = { *   "tip":"images/MsgError.gif" *   } */}3.Java调用过程这里只演示Java如何调用Mysql的过程和函数,不是讲解过程和函数如何书写,关于过程和函数的讲解,我们会在Oracle中学习----------------------------------------------------------------------------------过程#修改mysql语句的结果符为//mysql > delimiter //#定义一个过程,获取users表总记录数,将10设置到变量count中create procedure simpleproc(out count int)begin    select count(id) into count from users;end//#修改mysql语句的结果符为;mysql > delimiter ;#调用过程,将结果覆给变量a,@是定义变量的符号call simpleproc(@a);#显示变量a的值select @a;//以下是Java调用Mysql的过程String sql = "{call simpleproc(?)}";Connection conn = JdbcUtil.getConnection();CallableStatement cstmt = conn.prepareCall(sql);cstmt.registerOutParameter(1,Types.INTEGER);cstmt.execute();Integer count = cstmt.getInt(1);System.out.println("共有" + count + "人");----------------------------------------------------------------------------------函数#修改mysql语句的结果符为//mysql > delimiter //#定义一个函数,完成字符串拼接create function hello( s char(20) ) returns char(50) return concat('hello,',s,'!');//#修改mysql语句的结果符为;mysql > delimiter ;#调用函数select hello('world');//以下是Java调用Mysql的函数String sql = "{? = call hello(?)}";Connection conn = JdbcUtil.getConnection();CallableStatement cstmt = conn.prepareCall(sql);cstmt.registerOutParameter(1,Types.VARCHAR);cstmt.setString(2,"zhaojun");cstmt.execute();String value = cstmt.getString(1);System.out.println(value);JdbcUtil.close(cstmt);JdbcUtil.close(conn);package cn.itcast.javaee.callmysql;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;/** * 工具类 */public class JdbcUtil {private static String driver = "com.mysql.jdbc.Driver";private static String url = "jdbc:mysql://127.0.0.1:3306/js";private static String user = "root";private static String password = "root";static{try {Class.forName(driver);} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConnection() throws Exception{return DriverManager.getConnection(url,user,password);}public static void close(Connection conn) throws Exception{if(conn != null){conn.close();}}public static void close(Statement stmt) throws Exception{if(stmt != null){stmt.close();}}public static void close(ResultSet rs) throws Exception{if(rs != null){rs.close();}}}package cn.itcast.javaee.js.callmysql;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.Types;/** * 演示Java调用Mysql的过程 */public class TestJavaCallMysqlProc {public static void main(String[] args) throws Exception{//Java调用过程的语法,这里只有一个?号,它是输出值String  sql = "{call simpleproc(?)}";Connection conn = JdbcUtil.getConnection();CallableStatement cstmt = conn.prepareCall(sql);//这个输出的?设置类型,?号下标从1开始cstmt.registerOutParameter(1,Types.INTEGER);//执行过程的调用cstmt.execute();//接收过程的返回值Integer count = cstmt.getInt(1);//显示System.out.println("共有" + count + "个用户");JdbcUtil.close(cstmt);JdbcUtil.close(conn);}}package cn.itcast.javaee.js.callmysql;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.Types;/** * 演示Java调用Mysql的函数 */public class TestJavaCallMysqlFunc {public static void main(String[] args) throws Exception{String  sql = "{? = call hello(?)}";Connection conn = JdbcUtil.getConnection();CallableStatement cstmt = conn.prepareCall(sql);//第一个输出的?设置类型cstmt.registerOutParameter(1,Types.VARCHAR);//第二个输入的?设置值cstmt.setString(2,"赵君");//调用函数cstmt.execute();//接收返回的值String value = cstmt.getString(1);//显示System.out.println(value);JdbcUtil.close(cstmt);JdbcUtil.close(conn);}}掌握Java调用Oracle过程与函数      写一个计算个人所得税的应用--定义过程create or replace procedure get_rax(salary in number,rax out number)as    --需要交税的钱    bal number;begin    bal := salary - 3500;    if bal<=1500 then       rax := bal * 0.03 - 0;    elsif bal<=4500 then       rax := bal * 0.1 - 105;    elsif bal<=9000 then       rax := bal * 0.2 - 555;    elsif bal<=35000 then       rax := bal * 0.25 - 1005;    elsif bal<=55000 then       rax := bal * 0.3 - 2755;    elsif bal<=80000 then       rax := bal * 0.35 - 5505;    else       rax := bal * 0.45 - 13505;    end if;end;/--调用过程declare   --交税   rax number;    salary number := &salary;begin   get_rax(salary,rax);    dbms_output.put_line(salary||'元工资需要交'||rax||'元税');end;/     public class TestCallOracleProc {public static void main(String[] args) throws Exception{String sql = "{call get_rax(?,?)}";Connection conn = JdbcUtil.getConnection();CallableStatement cstmt = conn.prepareCall(sql);cstmt.setInt(1,10000);cstmt.registerOutParameter(2,Types.INTEGER);cstmt.execute();Integer rax = cstmt.getInt(2);System.out.println("10000元需要交" + rax + "元税");JdbcUtil.close(cstmt);JdbcUtil.close(conn);}}      查询7788号员工的的姓名,职位,月薪--定义函数create or replace function findEmpNameAndJobAndSal(pempno in number,pjob out varchar2,psal out number) return varchar2as    pename emp.ename%type;begin    select ename,job,sal into pename,pjob,psal from emp where empno = pempno;    return pename;end;/--调用函数declare    pename emp.ename%type;    pjob   emp.job%type;    psal   emp.sal%type;begin    pename := findEmpNameAndJobAndSal(7788,pjob,psal);    dbms_output.put_line('7788'||'--'||pename||'--'||pjob||'--'||psal);end;/     public class TestCallOracleFunc {public static void main(String[] args) throws Exception{String sql = "{?=call findEmpNameAndJobAndSal(?,?,?)}";Connection conn = JdbcUtil.getConnection();CallableStatement cstmt = conn.prepareCall(sql);cstmt.registerOutParameter(1,Types.VARCHAR);cstmt.setInt(2,7788);cstmt.registerOutParameter(3,Types.VARCHAR);cstmt.registerOutParameter(4,Types.INTEGER);cstmt.execute();String ename = cstmt.getString(1);String job = cstmt.getString(3);Integer sal = cstmt.getInt(4);System.out.println(ename+":"+job+":"+sal);JdbcUtil.close(cstmt);JdbcUtil.close(conn);}}4.mysql优化方案为什么要优化:     随着实际项目的启动,数据库经过一段时间的运行,最初的数据库设置,会与实际数据库运行性能会有一些差异,这时我们         就需要做一个优化调整。数据库优化这个课题较大,可分为四大类:       》主机性能       》内存使用性能       》网络传输性能       》SQL语句执行性能【软件工程师】下面列出一些数据库SQL优化方案:(01)选择最有效率的表名顺序(笔试常考)       数据库的解析器按照从右到左的顺序处理FROM子句中的表名,       FROM子句中写在最后的表将被最先处理,      在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表放在最后,      如果有3个以上的表连接查询,那就需要选择那个被其他表所引用的表放在最后。      例如:查询员工的编号,姓名,工资,工资等级,部门名      select emp.empno,emp.ename,emp.sal,salgrade.grade,dept.dname      from salgrade,dept,emp      where (emp.deptno = dept.deptno) and (emp.sal between salgrade.losal and salgrade.hisal)        1)如果三个表是完全无关系的话,将记录和列名最少的表,写在最后,然后依次类推      2)如果三个表是有关系的话,将引用最多的表,放在最后,然后依次类推(02)WHERE子句中的连接顺序(笔试常考)        数据库采用自右而左的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之左,      那些可以过滤掉最大数量记录的条件必须写在WHERE子句的之右。        例如:查询员工的编号,姓名,工资,部门名        select emp.empno,emp.ename,emp.sal,dept.dname      from emp,dept      where (emp.deptno = dept.deptno) and (emp.sal > 1500)     (03)SELECT子句中避免使用*号      数据库在解析的过程中,会将*依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间      select empno,ename from emp;(04)用TRUNCATE替代DELETE   (05)尽量多使用COMMIT      因为COMMIT会释放回滚点(06)用WHERE子句替换HAVING子句      WHERE先执行,HAVING后执行     (07)多使用内部函数提高SQL效率     (08)使用表的别名      salgrade s     (09)使用列的别名      ename e


0 0